2 回答
TA贡献1820条经验 获得超10个赞
父组件:
当您更新组件时,actionToPerform您的组件不知道并且不会重新呈现,您需要将其保存在其state:
state = {
actionToPerform: ""
}
updateState(actionToPerform){
this.setState({ actionToPerform })
}
<button onClick={() => this.updateState('new')}>Create new Shoppinglist</button>
<button onClick={() => this.updateState('edit')}>Edit Shoppinglist</button>
<Edit action={actionToPerform}/>
现在,当您单击其中一个按钮时,状态的值会更新并且组件会重新呈现,将新值传递给子组件。
子组件:
您不应该从 设置状态的初始值props,请参阅反模式:无条件地将道具复制到状态
您甚至可以将它们全部删除,因为您可以根据props值进行条件渲染:
export default class Edit extends React.Component {
render() {
return this.props.actionToPerform === "new" ? (
<div>new Shoppinglist</div>
) : this.props.actionToPerform === "edit" ? (
<div>edit</div>
) : (
<div>nothing to show</div>
);
}
}
TA贡献1848条经验 获得超6个赞
您应该使用组件中的状态,而不是在组件Edit中使用状态parentt,并将该状态作为 prop 传递给子(编辑)组件并使用它。
父类.js
actionState = (action) => {
if(action === 'new'){
this.setState({ actionToPerform: 'new' })
} else{
this.setState({ actionToPerform: 'edit' })
}
}
render() {
return (
<div>
<button onClick={() => this.actionState('new')}>Create new Shoppinglist</button>
<button onClick={() => this.actionState('edit')}>Edit Shoppinglist</button>
<Edit action={this.state.actionToPerform}/>
</div>
)
}
孩子.js
export default class Edit extends React.Component {
showTitle() {
if(this.props.actionToPerform === 'new'){
return <div>new Shoppinglist</div>
} else if(this.props.actionToPerform === 'edit'){
return <div>edit</div>
} else{
return <div>nothing to show</div>
}
}
render() {
return (
this.showTitle()
)
}
添加回答
举报