需求:
现在有两个 component
,一个是 parent
,一个是 child
,在 parent component
中,我需要发送一个请求获取到数据,然后我需要把数据传递给 child component
, child component
在拿到数据后再去根据传递过来的数据发送请求。
尝试的方法:
在 parent component
的 componentDidMount
方法中发送请求,然后在 render
中把请求的 props
数据传递给 child component
,child component
在 componentDidMount
中在去接收传递过来的数据进行请求数据,结果发现并不能得到想要的结果。原因是:
当 parent
render
之后,接着 child
就会 render
,然后 child componentDidMount
就会被调用,最后才会调用 parent componentDidMount
,那么我在 parent
中拿到数据后 re-render
,在 child
不会再次调用 componentDidMount
了(componentDidMount
只会执行一次)
请问有其它的方法可以实现这个需求吗?
谢邀!
首先React组件一般分为容器组件和展示组件,这两者到底有什么区别呢?
展示组件
通常被实现为无状态功能组件
(stateless functional components),也就是说它们没有内部状态,只是负责把获取到的数据渲染出来,因为它不知道获取到的数据是什么样的,不知道props和state的变化,它永远不应该改变props中的数据。实际上,任何的组件从父级得到的props都是不可变化的。而
容器组件
知道数据,知道数据的形态以及数据从何而来,所以它们负责处理业务逻辑,它们接收信息并对其进行格式化,以便由展示组件简单地使用。一般情况,“容器组件”总是作为可视化组件的父级组件出现!当然,凡事都没有绝对性!您也可以在展示组件处理业务逻辑,相比之下展示组件负责渲染数据更合理些!好了,废话不说了,就问题而言大致有两种处理思路:
第一种:在
child component
声明周期函数componentWillReceiveProps
内监听nextProps,执行余下操作。第二种:所有请求都在父组件完成,获取到最终的数据,然后通过props传递给子类。至于两个请求依赖关系,
es6之前
普通ajax,我们要层层嵌套回调,es6
我们可以直接用Promise
,Promise优点就是多重链式调用
,可以避免层层嵌套回调