如果你总能使用状态数据,为什么要使用道具?

时间:2017-09-19 18:25:27

标签: javascript reactjs

我了解传递组件数据的两种方法:道具和状态。但为什么人们需要一个国家的支柱呢?似乎状态对象只能在组件内部使用,那么为什么要在标记中传递prop参数?

2 个答案:

答案 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;得到的   该计划的当前状态

  1. 您可以在其他方式共享或访问私人对象 功能。
  2. 这是设计,你明确分享的东西,你会通过 只有组件需要的东西。例如,看看它的这一页 堆栈溢出,让我们说投票按钮是组件,为什么 如果它只需要投票数,我会把它们传给整个州吗? 和2个onClick事件监听器?我应该通过当前登录 用户或可能在此页面中呈现的整个答案?
  3.   

    所以你不能在父母和孩子之间传递状态?例如,不能   父级更改状态,然后子级获得新状态

    这正是propscontext应该做的事情,提供了一个用于在父母和孩子之间共享数据的API,尽管我们将其保存在从父母到孩子的单向数据流中,您可以& #39; t向上传递道具。但是你调用传递给子组件的处理程序,并通过该处理程序传递数据。