我了解传递组件数据的两种方法:道具和状态。但为什么人们需要一个国家的支柱呢?似乎状态对象只能在组件内部使用,那么为什么要在标记中传递prop参数?
答案 0 :(得分:0)
道具由父组件在外部设置。 E.g;
render() {
return <ChildComponent someProp={someValue}/>;
}
状态是在内部设置的,通常由子级内的用户事件触发。 E.g;
handleUserClickedButton: () {
this.setState({
buttonClicked: true
});
},
render() {
return <button onClick={this.handleUserClickedButton}/>;
}
因此,道具是数据从父母传给孩子的一种方式。状态是在单个组件内管理数据的一种方式,并且可能对由子项触发的数据进行更改。实际上,它们代表了在两个相反方向上传播的数据,它们的传递方式完全是唯一的。
答案 1 :(得分:0)
通过&#34;传递&#34;或访问组件外部的数据,但state
不是其中之一
两种方式是:
Props - 父组件传递给子组件
Context - 您可以&#34;跳过&#34;树中的直接父母。
state
是一个内部对象,除非你明确地传递它(通过上面提到的两种方式),否则没有其他组件可以访问它。
所以基本上你的问题不准确,因为你可以真正比较两者 我认为你真正要问的是为什么使用无状态而不是状态完全组件 您可以在Stack-overflow或其他网站中找到答案。
修改强>
你的一些评论的后续跟进。
为什么孩子不仅拥有共享状态?例如,每个 组件(或子组件)可以只做一个&#34; this.state&#34;得到的 该计划的当前状态
onClick
事件监听器?我应该通过当前登录
用户或可能在此页面中呈现的整个答案?所以你不能在父母和孩子之间传递状态?例如,不能 父级更改状态,然后子级获得新状态
这正是props
或context
应该做的事情,提供了一个用于在父母和孩子之间共享数据的API,尽管我们将其保存在从父母到孩子的单向数据流中,您可以& #39; t向上传递道具。但是你调用传递给子组件的处理程序,并通过该处理程序传递数据。