vis*_*ram 7 javascript function setstate reactjs react-props
class App extends Component {
constructor() {
super();
this.state = {
name: 'React'
};
this.setState=this.setState.bind(this)
}
render() {
return (
<div>
<Hello name={this.state.name} />
<p>
Start editing to see some magic happen :)
</p>
<Child {...this}/>
</div>
);
}
}
child Component
var Child=(self)=>{
return(
<button onClick={()=>{
self .setState({
name:"viswa"
})
}}>Click </button>
)
Run Code Online (Sandbox Code Playgroud)
在这里我绑定 setState 函数并将其作为道具发送到子组件。这将改变父组件的状态。这是正确的方法吗?
但这比传递函数简单。如果我想改变很多状态改变。与传递函数相比,这将是简单快捷的方法,对吧?
正确的方法与您的方法一样简单,并且不违反最佳实践:
class App extends Component {
state = {
name: 'React',
};
render() {
return (
<div>
<Hello name={this.state.name} />
<p>
Start editing to see some magic happen :)
</p>
<Child onClick={() => this.setState({name: 'viswa'})}/>
</div>
);
}
}
const Child=({onClick})=>(
<button onClick={onClick}>Click</button>
);
Run Code Online (Sandbox Code Playgroud)
正如 @yBrodsky 所说,您应该传递一个确实会改变状态的函数。这是一个例子:
class App extends Component {
constructor() {
super();
this.state = {
name: 'React'
};
this.update=this.update.bind(this);
}
update(nextState) {
this.setState(nextState);
}
render() {
return (
<Child updateParent={this.update} />
);
}
}
const Child = ({updateParent}) => (
<button onClick={() => updateParent({name: 'Foo bar'})}>Click</button>
);
Run Code Online (Sandbox Code Playgroud)
您现在可以完全控制子级中父级的状态。只需传递要浅合并到父状态的对象即可。在此示例中,nameinApp将更改为Foo bar单击按钮时。
| 归档时间: |
|
| 查看次数: |
14834 次 |
| 最近记录: |