【发布时间】:2016-11-03 06:39:37
【问题描述】:
免责声明:我查看了Reactjs: how to modify child state or props from parent?,但不相信答案适合我的问题。
所以我有一个可重用的、有状态的对话组件,它根据其状态呈现不同的 DOM。我还必须能够控制从父级渲染哪个 DOM。
TL;DR - 我应该如何改变父组件的子组件状态,如果有的话,还有哪些其他选项?
孩子:
export default class Conversation extends Component {
constructor(props) {
super(props);
this.state = {
newConversation: props.showNewConversation
};
}
render() {
if (!this.state.newConversation) {
return (
<div>Current Conversation</div>
);
} return (
<div>New Conversation</div>
);
}
}
现在我需要在不同的地方渲染这个组件,但是我需要根据父级渲染适当的 DOM,即从导航栏你可以创建一个新的对话,从用户页面你可以直接进入你的对话和他们在一起,所以我可以控制何时通过它的道具给孩子打电话。
通过 prop 调用 child 并设置 state:
<Conversation
showNewConversation={this.state.isConversationShown === true}
/>
这目前正在运行,但有人告诉我这是 React 中的一个非常糟糕的做法,我的问题实际上是为什么这被认为是不好的做法,以及一个好的做法解决方案是什么样的。
【问题讨论】:
-
为什么对于通过
props从所有者到拥有组件的数据流来说这是一个非常糟糕的做法?
标签: javascript reactjs react-jsx