ReactJS动态调用自定义类

时间:2015-05-30 18:42:44

标签: coffeescript reactjs

我正在尝试设置一种从某些json值动态创建表单对象的方法。基本上,我在我的json中有表单对象类型和属性。我将该类型传递给FormInput类,然后调用包含实际表单对象的自定义类。我现在的问题是,当我传入自定义类名“TextInput”(this.props.formElementType)时,React只创建一个名为“textinput”的元素,而不是调用该类。它似乎不喜欢传入字符串,但只想要类名。从本质上讲,...

TextInput = React.createClass({...})
...
FormItem = React.createElement(<TextInputPassedAsAString>, {...})

我不确定是否可以通过传递字符串来调用自定义类。我需要这个实现的帮助或更好的主意,因为我对React比较新。

以下是从以最终渲染块结尾的子节点开始的所有相关代码。请原谅伪咖啡。

的TextInput

TextInput = React.createClass
  handleChange: (event)->
    this.setState
      value: event.target.value
  render: ->
    React.createElement('label', {
      value: this.props.formElementLabel
    })
    React.createElement('input', {
      id: this.props.formElementID,
      type: 'text'
    })
module.exports = TextInput

FormElement

FormElement = React.createClass
render: ->
  R.div(null,
    React.createElement(this.props.formElementType, {
      formElementID: this.props.formElementID,
      formElementLabel: this.props.formElementLabel
    })
module.exports = FormElement

初始调用/最终渲染

React.createElement(FormElement, {
  formElementType: 'TextInput',
  formElementID: 'firstFormElement',
  formElementLabel: 'First text input'
})

1 个答案:

答案 0 :(得分:1)

嗯,最好的方法,最容易推理等等,可能需要在进行最终渲染的模块中TextInput。在那里创建它,将其他props传递给它,然后将这个创建的组件传递给FormElement,而不是传递组件的字符串表示。

更动态地执行此操作的一种方法是拥有一个模块,该模块将每个动态组件导出为导出时的属性/方法。类似的东西:

module.exports = {
  TextInput: ...
}

然后当你进行渲染时,你可以传递这样的东西:

myImports[json.formElementType]