React:将子组件作为this.child存储在父构造函数中-这是一个坏主意吗?

迈克尔·福图纳托

我试图将我的子组件存储在父构造函数中,作为类实例的属性。关于状态更改,我希望父级(因此是孩子)会重新显示,并且屏幕上的字母“ b”与“ a”相对应。为什么这不起作用?

状态更改时不显示“ b”

class Parent extends React.Component {
    constructor(props) {
        super(props);
         this.state = {letter : "a"};
         setTimeout(() => this.setState({letter: "b"}, 1000);
    }
         this.child= <Child letter = this.state.letter>
     }
     render() {
      return this.child;
     }
}

class Child extends React.Component {
    render() {
    <p>{this.prop.letter}</p>
}
}

但是,当我不将子组件存储为父组件的类属性,而是直接在render方法中对其进行呈现时,它将起作用。子组件反映了更改。这是因为render每次运行时都会创建一个新的JSX对象,并且通过将子jsx存储为父对象的属性,实际上就是在渲染那个旧的子对象?

在状态更改时正确显示“ b”

class Parent extends React.Component {
    constructor(props) {
        super(props);
         this.state = {letter : "a"};
         setTimeout(() => this.setState({letter: "b"}, 1000);
    }
     }
     render() {
      return <Child letter = {this.state.letter}/>;
     }
}

class Child extends React.Component {
    render() {
    <p>{this.prop.letter}</p>
}
}```
塔吉·哈瓦里(Taghi Khavari)

您不能将对象作为render return语句返回,在大多数情况下应该是jsx这样,因此,如果您想以错误的方式进行操作,则需要这样的操作:

render() {
  return <div>{this.child}</div>
}

但是,让我们看看为什么这是错误的,因为React更改state or props将导致重新提交,这就是为什么您需要将数据保存在这些位置,否则像您的情况一样(如果像我在上面显示的那样更改它,那是错误的),您会得到stale data和您说letter您要使用的Child组件是旧版本,不会更新

因此,以另一种方式说,该constructor函数将仅在初始化时调用,并且在您将其设置this.child attribute为letter的那一刻a,在1000ms状态将更改为letterb但您constructor不会再次调用该函数的情况下。因此您仍然具有旧的价值。

在平均时间,因为state已经从ab render功能,如果你有会被再次调用,这里Child的组件render function作为jsx你的新数据

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将脚本保留在/ root中是一个坏主意吗?

来自分类Dev

将django基类包装到中间类中是一个坏主意吗?

来自分类Dev

使用Firebase UID作为用户的数据存储区密钥名称会是一个坏主意吗?

来自分类Dev

在诸如AppRoot中的快餐栏之类的反应全局组件中使用CustomEvent是一个坏主意吗?

来自分类Dev

类库中的SignalR集线器?这是一个好主意还是一个坏主意?

来自分类Dev

在C中创建一个通用的“函数指针”联合是一个坏主意吗?

来自分类Dev

在Postgresql jsonb中存储外键是一个坏主意吗?

来自分类Dev

在超薄托架中使用SSD作为主硬盘是一个坏主意吗?

来自分类Dev

将网线连接到配线架的正面而不是背面是一个坏主意吗?

来自分类Dev

在 init 方法中启动线程是一个坏主意吗?

来自分类Dev

使用ElasticSearch作为替代数据存储,同时应用程序同时更新数据库和ES(在Kafka的帮助下)。这是一个好主意吗?

来自分类Dev

在raidz2设置中将ssd的多个分区之一作为缓存是一个坏主意吗?

来自分类Dev

使用数据库的主键作为业务对象标识符是一个坏主意吗?

来自分类Dev

将请求插入内置字典中是个坏主意吗?

来自分类Dev

将类实现保留在其接口的静态字段中是个坏主意吗?

来自分类Dev

将外部硬盘驱动器设置为始终旋转是一个坏主意吗?

来自分类Dev

匿名类实例----这是一个坏主意吗?

来自分类Dev

在运行过程中更改发送给Sbatch的bash脚本是一个坏主意吗?

来自分类Dev

将数据作为键存储在具有空/空值的HashMap中是一个好主意吗?

来自分类Dev

将加密的密码密钥存储在另一个表中是一个好主意吗?

来自分类Dev

在React.Js中创建一个组件作为另一个组件的子组件

来自分类Dev

将实例传递给__init__。这是一个好主意吗?

来自分类Dev

使用宏在C中实现通用向量。这是一个好主意吗?

来自分类Dev

临时扩展Java中的现有对象-这是一个好主意吗?

来自分类Dev

RX中是否存在只读BehaviorSubject接口,如果不存在,那么创建一个接口是一个坏主意吗?

来自分类Dev

将“ screen -r”放在我的.bashrc中是一个好主意吗?

来自分类Dev

将所有帮助程序类合并到一个巨大的类中是一个好主意吗?

来自分类Dev

我可以将循环缓冲区减小到“ 1”吗?这是一个好主意吗?

来自分类Dev

我可以将循环缓冲区减小到“ 1”吗?这是一个好主意吗?

Related 相关文章

  1. 1

    将脚本保留在/ root中是一个坏主意吗?

  2. 2

    将django基类包装到中间类中是一个坏主意吗?

  3. 3

    使用Firebase UID作为用户的数据存储区密钥名称会是一个坏主意吗?

  4. 4

    在诸如AppRoot中的快餐栏之类的反应全局组件中使用CustomEvent是一个坏主意吗?

  5. 5

    类库中的SignalR集线器?这是一个好主意还是一个坏主意?

  6. 6

    在C中创建一个通用的“函数指针”联合是一个坏主意吗?

  7. 7

    在Postgresql jsonb中存储外键是一个坏主意吗?

  8. 8

    在超薄托架中使用SSD作为主硬盘是一个坏主意吗?

  9. 9

    将网线连接到配线架的正面而不是背面是一个坏主意吗?

  10. 10

    在 init 方法中启动线程是一个坏主意吗?

  11. 11

    使用ElasticSearch作为替代数据存储,同时应用程序同时更新数据库和ES(在Kafka的帮助下)。这是一个好主意吗?

  12. 12

    在raidz2设置中将ssd的多个分区之一作为缓存是一个坏主意吗?

  13. 13

    使用数据库的主键作为业务对象标识符是一个坏主意吗?

  14. 14

    将请求插入内置字典中是个坏主意吗?

  15. 15

    将类实现保留在其接口的静态字段中是个坏主意吗?

  16. 16

    将外部硬盘驱动器设置为始终旋转是一个坏主意吗?

  17. 17

    匿名类实例----这是一个坏主意吗?

  18. 18

    在运行过程中更改发送给Sbatch的bash脚本是一个坏主意吗?

  19. 19

    将数据作为键存储在具有空/空值的HashMap中是一个好主意吗?

  20. 20

    将加密的密码密钥存储在另一个表中是一个好主意吗?

  21. 21

    在React.Js中创建一个组件作为另一个组件的子组件

  22. 22

    将实例传递给__init__。这是一个好主意吗?

  23. 23

    使用宏在C中实现通用向量。这是一个好主意吗?

  24. 24

    临时扩展Java中的现有对象-这是一个好主意吗?

  25. 25

    RX中是否存在只读BehaviorSubject接口,如果不存在,那么创建一个接口是一个坏主意吗?

  26. 26

    将“ screen -r”放在我的.bashrc中是一个好主意吗?

  27. 27

    将所有帮助程序类合并到一个巨大的类中是一个好主意吗?

  28. 28

    我可以将循环缓冲区减小到“ 1”吗?这是一个好主意吗?

  29. 29

    我可以将循环缓冲区减小到“ 1”吗?这是一个好主意吗?

热门标签

归档