当前位置: 首页 > 知识库问答 >
问题:

此.setState()(react.Component方法)如何访问其子级的类状态?

解鸿运
2023-03-14

事实上,我正在学习如何反应JS,但我不清楚家长的类方法如何能够访问孩子的类状态。我在这个主题上搜索了很多,但在面向对象编程中,父类无法访问其子类的属性(状态)。但在react js中,setState()如何访问其子级的类属性(state)。这可能是个愚蠢的问题请告诉我它是怎么发生的?

共有2个答案

田硕
2023-03-14

如果您想清除任何混淆,通过组件应用编程接口理解父子结构可能会有所帮助。既然你提到了类组件,让我用同样的例子来说明一个例子。

您可以通过在JSX插入中定义属性将道具从父级发送给子级-

<Child uniqueProp="Text sent to Child" />

相反,在父组件中访问子数据很棘手。你必须按照这些步骤-

  1. 在父组件中定义回调函数以从子组件获取数据。
  2. 将父组件中的回调函数作为道具传递给子组件。
  3. 子组件使用props调用父回调函数

范例-

父组件

class Parent extends React.Component {      

  constructor(props) {
    super(props);
    this.state = {
      text: "Original Text"
    }
  }    

  handleCallback = (value) => {
    this.setState({ text: value })
  }    

  render() {
    return (
      <div>
        <Child changeText={this.handleCallback} />
        {this.state.text}
      </div>
    )
  }

}

子组件

class Child extends React.Component { 

  render() {
    return (
      <div>
        <button onClick={() => this.props.changeText("Data from child")}>
          Button
        </button>
      </div>
    )
  }

}

之所以这样设置,是因为道具是通过引用传递的。如果您选择更改父对象的状态state={“something”}而不是setState({“something”}),则该对象也将在子组件中修改,但不会有重新渲染周期。在手动刷新之前,用户不会看到UI更改。

当您使用setState更改父级的状态(标准做法)时,将按预期触发重新渲染周期,并且子组件将反映UI更改。

注意:请注意,功能组件的使用现在几乎是事实。在我看来,通过集成挂钩和数据存储(如Redux)使生活变得轻松。

桂坚
2023-03-14

别担心,这是一个很棒的问题。

道具是通过引用传递的!

这里有一些来自StackOverflow帖子的很好的答案,可以更具体地回答你的问题。

在reactjs中,道具是按值传递还是按引用传递?

我认为我可以提供的一些潜在的细微差别是,反应强调组合而不是继承。您应该将其视为由子组件组成的父组件。虽然子组件有权访问父状态,但它们不会继承父状态。

 类似资料:
  • 我在ReactJS中得到了一个子类和一个父类。我想让我的孩子访问父级的状态,这是每毫秒更新一次。孩子也应该有可能接触到一些父母的方法。 在另一个类中,我正在初始化一个子对象并对其调用Function startManager()。但随后我收到一条错误消息,说无法读取未定义的属性“start”。我是一个新的反应者,我认为我在定义孩子的属性时犯了一些错误。有人知道我做错了什么吗。谢谢

  • null 从我的类中调用这些代码的工作方式与我预期的一样。但是,我想在Kotlin子类之外调用其中的一个方法。 如果从不同的Kotlin类尝试,则会出现以下编译错误: 未解析得引用:completeWakefulIntent

  • 我有两个不同包的亲子班。我正在重写受保护类型的方法。我想访问子类中的超类保护方法。 考虑以下代码: 认为我是Java新手,并在main方法中提供替代comment的答案。

  • 问题内容: 假设我正在构建一个井字游戏(因为它与结构非常相似),我希望结果在弹出窗口中显示,并带有一个新的游戏按钮,并且希望此弹出窗口允许我访问设置(另一个按钮)并对其进行更改,使其始终位于弹出窗口中,然后离开并最终将其关闭并开始新游戏。 我希望我可以保持秩序,因此有一个单独的弹出窗口类,可以在其中构建自定义弹出窗口。 显而易见,我将newgame方法和reset方法作为我的游戏网格类的方法。另一

  • 我还没有反应过来,现在我的状态中有了这些信息(如图所示),我如何才能访问消息:? 我尝试了和,但似乎两者都不对,有人能告诉我如何访问消息吗?非常感谢。 //////////////////////////////////////////// 嗨,克里斯,非常感谢你的回答。 您是对的,错误对象是从API返回的,我已经将其添加到状态。 我也试过 this.set状态({错误: errorObjFrom

  • 我正在开发一个计算圆形和方形(类)面积的小练习java程序,该程序实现了surface(接口),它有一个名为area()的方法。我需要实现一个名为SumArea的类,该类有一个名为Calcrea()的通用方法,该方法接收Circle circ[]和Square Square[]数组,并执行面积计算 程序结构: - urface.java quare.java 圆圈java rea.java 我怀疑