【问题标题】:Dynamically Rendering a React Component in React 0.12在 React 0.12 中动态渲染 React 组件
【发布时间】:2015-02-10 14:56:45
【问题描述】:

I asked this question previously,但是随着 React 0.12 和它带来的 JSX 变化,我现在正在寻找另一种方法来实现这个功能。

这是在 React 0.11 中工作的代码:

return React.createClass({
    render: function() {

      var Tag = React.DOM[this.props.element];

      return (
        <Tag className='text'>
          {this.props.value}
        </Tag>
      );
    }
});

我正在制作一个组件,它根据传入的称为“元素”的道具呈现不同的 DOM 元素。 this.props.element 将是一个值,例如“p”、“h1”或“h2”等。虽然这在技术上有效,但我在控制台中看到了一条警告消息:

Warning: Do not pass React.DOM.p to JSX or createFactory. Use the string "p" instead.
Warning: Do not pass React.DOM.h2 to JSX or createFactory. Use the string "h2" instead.

需要一些指导来帮助解释该警告,我找不到有关如何执行此类操作的良好文档。

【问题讨论】:

    标签: reactjs react-jsx


    【解决方案1】:

    对此的超级简单答案(React 0.12 的 +1 让事情变得更简单!)但所需要做的就是删除变量定义的 React.DOM[] 部分,并传递字符串文字:

    return React.createClass({
        render: function() {
    
          var Tag = this.props.element;
    
          return (
            <Tag className='text'>
              {this.props.value}
            </Tag>
          );
        }
    });
    

    工作精美;没有任何控制台警告!

    【讨论】:

    • 另外,您还可以传递自定义组件,例如 MyComponent 而不是“p”或“h1”。从术语上讲,react 中的元素是 &lt;Something /&gt;(编译为 React.createElement(Something)`)的结果,“组件”或“类型”或更特定于用例的东西可能是更清晰的道具名称。
    • !重要!标签名称必须大写才能正常工作。
    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 2023-04-03
    • 2022-01-25
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多