react 组件名可以使用变量吗?或者传入组件的props可以用整个object传吗?

react 组件名可以使用变量吗?或者传入组件的props可以用整个object传吗?

switch (fieldObj.type){
   case 'input' :
            return <Input
                hidden={fieldObj.hidden===true?'hidden':undefined}
                disabled={fieldObj.disabled===true}
                key={fieldObj.id}
                value={!fieldObj.value||typeof fieldObj.value=="string"?fieldObj.value:fieldObj.value[this.props.index]}
                onChange={(e)=>this.props.changeValue(e,fieldObj)}
                style={style}
                placeholder={fieldObj.placeholder}
            />;
        case 'select':
            return <Select
                style={style}
                hidden={fieldObj.hidden===true?'hidden':undefined}
                disabled={fieldObj.disabled===true}
                key={fieldObj.id}
                value={fieldObj.value}
                onChange={(e)=>this.props.changeValue(e,fieldObj)}
                placeholder={fieldObj.placeholder}
            >
                {
                    fieldObj.dataId?fieldObj.dataId.map(function(selectData,index){
                        return <Select.Option
                            value={selectData}
                            key={fieldObj.id+"option"+selectData}
                        >
                            {fieldObj.dataValue[index]}
                        </Select.Option>
                    }):null
                }
            </Select>;
        case 'textarea':
            return <Input.TextArea
                autosize
                style={style}
                hidden={fieldObj.hidden===true?'hidden':undefined}
                disabled={fieldObj.disabled===true}
                key={fieldObj.id}
                value={fieldObj.value}
                onChange={(e)=>this.props.changeValue(e,fieldObj)}
                placeholder={fieldObj.placeholder}
            />;
            
            

每次只能通过switch的方式来调用不同的组件,有什么方法可以在组件名中写变量,比如<{type}/>之类的。或者说所有的props可以放在一个对象里面传下去吗,就像<Input props={props} /> ,每次都这样写感觉重复的代码太多了

阅读 7k
2 个回答

把重复的代码提取出来,类似于这样:

const props = {
                hidden: fieldObj.hidden===true?'hidden':undefined,
                disabled: fieldObj.disabled===true,
                key: fieldObj.id,
                value: !fieldObj.value||typeof fieldObj.value=="string"?fieldObj.value:fieldObj.value[this.props.index],
                onChange: (e)=>this.props.changeValue(e,fieldObj),
                style: style,
                placeholder: fieldObj.placeholder,
}

再传到组件中

<component ...{props}/>

把重复的属性提出来,存到一个对象里,再通过ES6的扩展运算符进行扩充或改写

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题