Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将道具绑定到React中的组件_Javascript_Reactjs - Fatal编程技术网

Javascript 如何将道具绑定到React中的组件

Javascript 如何将道具绑定到React中的组件,javascript,reactjs,Javascript,Reactjs,给定以下组件 const A = ({prop1,prop2}) => ( <div>{prop1 + ' ' + prop2}</div> ) 拿起道具,像这样传下去怎么样 <div><A prop1={BoundA.props.prop1} prop2='prop2!' /></div> React组件是不可变的,因此一旦创建了组件,就不能更改道具。要更新道具,我们必须像这样使用React.cloneElement

给定以下组件

const A = ({prop1,prop2}) => (
    <div>{prop1 + ' ' + prop2}</div>
)

拿起道具,像这样传下去怎么样

<div><A prop1={BoundA.props.prop1} prop2='prop2!' /></div>

React组件是不可变的,因此一旦创建了组件,就不能更改道具。要更新道具,我们必须像这样使用
React.cloneElement()

const B = ({ BoundA }) => (
 <div>React.cloneElement(BoundA,{prop2:'prop2!'})</div> 
)
const B=({BoundA})=>(
React.cloneElement(BoundA,{prop2:'prop2!'})
)

此解决方案与acdcjunior的类似,但不要求B导入A。这也使得B可以在不同时接受组件和组件实例的情况下接受组件

我认为这可以完成工作,但如果我在A的构造函数中提出请求,我想会在两周内提出,你试过了吗?看来没有。尝试将
A
更改为
class A.Component{constructor(props){super(props);console.log('A instantiated',props.prop1,this)console.log('--')}render(){return{this.props.prop1+''+this.props.prop2};}
。只有在渲染函数中使用组件进行实际渲染时,才会调用构造函数。因此,我看到您编辑了答案。你试过密码了吗?
const A = ({prop1,prop2}) => (
    <div>{prop1 + ' ' + prop2}</div>
)
const B = ({ BoundA }) => {
  BoundA.props.prop2 = 'new prop prop2';
  return <div>{ BoundA }</div>
};
const B = ({ BoundA }) => (
  <div>{ React.cloneElement(BoundA, {prop2: 'prop2!' }) }</div>
)

<B BoundA={<A prop1='prop1!' />} />
const B = ({ BoundA }) => (
 <div>React.cloneElement(BoundA,{prop2:'prop2!'})</div> 
)