react-redux connect 和 redux 数据的组件生命周期顺序

Posted

技术标签:

【中文标题】react-redux connect 和 redux 数据的组件生命周期顺序【英文标题】:Order of component life cycle with react-redux connect and redux data 【发布时间】:2018-11-17 01:04:16 【问题描述】:

我们都知道constructor -> componentWillMount -> componentDidMount 是执行顺序。

现在当 redux 发挥作用并尝试在我们的组件生命周期中访问 redux 属性时。 connect 将执行的顺序是什么,以便 数据是可用的生命周期方法 忽略和数据更新到 redux。可能性是

1. Connect (DATA AVAILABLE) -> constructor & componentWillMount & componentDidMount

2. constructor -> Connect (DATA AVAILABLE) -> componentWillMount & componentDidMount

3. constructor -> componentWillMount -> Connect (DATA AVAILABLE) -> componentDidMount

4. constructor -> componentWillMount -> componentDidMount -> Connect (DATA AVAILABLE) 

顺序一致还是取决于加载的数据?

react 和 react native 有什么不同

并且可以将 redux 属性定义为 PropType 中要求的

【问题讨论】:

您能否提供您的用例以更好地理解问题 我希望它是一个一般场景并且没有任何具体的用例@abby37 【参考方案1】:

connect 是一个封装组件的 HOC,因此组件生命周期方法出现在连接生命周期之后。为了简单理解,可以认为connect是这样写的

const connect = (mapStateToProps, mapDispatchToProps) => (Component) => 
    return class ReduxApp extends React.Component 
        // lifecycle of connect
        render() 
            return (
                 <Component ...mapStateToProps(state) />
            )
        
    

现在,每当您的状态更新时,connect 将浅比较要返回给 Component 的 props 列表,如果有更改则更新 props,之后组件生命周期方法运行就像更新 props 一样。

简而言之,最初的执行是

Connect (DATA AVAILABLE) -> constructor & componentWillMount & componentDidMount

数据更新后

Connect (DATA AVAILABLE) -> componentWillReceiveProps/getDerivedStateFromProps -> componentWillUpdate -> render -> componentDidUpdate

【讨论】:

所以回复你的回答,这回答了我所有的问题。 1. Connect (DATA AVAILABLE) -> constructor & componentWillMount & componentDidMount 是顺序 2. 执行顺序是一致的 3. react 和 react-native 相同 4. 是的,可以在 PropType 中为 redux 属性定义 required 【参考方案2】:

初始执行顺序是 -

连接(数据可用)-> 构造函数 & componentWillMount & Render & componentDidMount

当站点启动时,redux connect 将首先在组件挂载生命周期之前使用其默认状态和操作进行初始化。但是,如果redux中有API调用,组件挂载生命周期不会等待数据。相反,如果组件已经挂载并且 redux 返回数据,则会调用组件更新生命周期。

【讨论】:

以上是关于react-redux connect 和 redux 数据的组件生命周期顺序的主要内容,如果未能解决你的问题,请参考以下文章

使用 React-Redux Hooks 和 React-Redux Connect() 的主要区别是啥?

react-redux的connect()方法

React-redux @connect 不起作用,但 connect() 可以

React-redux框架之connect()与Provider组件 用法讲解

React-Redux之connect

你如何混合 componentDidMount() 和 react-redux connect()?