javascript - DRY jsx 渲染方法

标签 javascript reactjs ecmascript-6 dry

我想知道这是否是干燥这段代码的更好方法,你们有什么想法吗? Prop 是一样的,只是组件改变了......

render() {
    const { input: { value, onChange }, callback, async, ...rest } = this.props;

    if (async) {
      return (
        <Select.Async
          onChange={(val) => {
            onChange(val);
            callback(val);
          }}
          value={value}
          {...rest}
        />
      );
    }

    return (
      <Select
        onChange={(val) => {
          onChange(val);
          callback(val);
        }}
        value={value}
        {...rest}
      />
    );
  }

最佳答案

与:

let createElement = function(Component) {
    return (
        <Component onChange={(val) => { 
            onChange(val);
            callback(val);
            }}
            value={value}
        {...rest}
      />
    );
};

你可以做到

let selectAsync = createElement(Select.Async);
let select = createElement(Select);

您可以使用 {{select}} 和 {{selectAsync}} 在 jsx 部分渲染它们

P.S.:我没有直接测试这个,但几天前做了一些非常类似的事情,所以这种方法应该有效。请注意,Component 必须以大写字母开头。

关于javascript - DRY jsx 渲染方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41465768/

相关文章:

javascript - ES6 将一个数组的元素归约成一个数组,其元素出现的频率

javascript - 将现有站点的特定部分嵌入另一个站点

javascript - 在事件冒泡中找到点击的来源

javascript - 在没有脚本标签的情况下为 XSS 执行 JavaScript

javascript - 处理其他元素未处理的 Javascript 事件

javascript - 尝试将 react-select 导入使用 create-react-app 创建的项目时出错

reactjs - 在 Reactjs 中动态生成导航栏?

javascript - 覆盖导入的样式组件 CSS 属性

angular - "' @param ' is redundant in TypeScript code if it has no description."TSLint 错误?

javascript - 使用 Set 时取消选中项目不起作用