reactjs - react Redux : Component not updated after connecting to redux

标签 reactjs react-native redux react-redux redux-thunk

这个问题可能看起来多余,但我的组件在调用 mapStateToProps 后似乎没有更新。下面是我在 Home 组件中编写的一段代码(ofc 在类声明之外)。

function mapStateToProps(state) {
  const { tickets } = state;
  console.tron.log(tickets)
  if(!tickets.isLoading) {
    return {
      loading: false,
      ticketsModel: tickets.chunkedData
    }
  }
  return {
    loading: true
  }
}
export default connect(mapStateToProps)(Home);

一切正常,但对 Prop 的更改不会触发我的组件中的更新。

PS:我检查了是否发生任何状态突变,但没有。我重新创建了一个新状态,例如

case RECEIVE_TICKETS :
      return Object.assign({},state,{
        isLoading: false,
        chunkedData: action.data.extractChunkedData(),
        completeData: action.data.getCompleteData(),
      }); 

A picture demonstrating the last Action Dispatch

编辑:问题已解决。愚蠢的我正在检查 componentWillMount 内部的更新而不是 componentWillReceiveProps

最佳答案

你可以像这样更简洁地编写你的mapStateToProps:

function mapStateToProps(state) {
  const { isLoading, chunkedData } = state.tickets;
  return {
    loading: isLoading,
    ticketsModel: chunkedData
  };
}
export default connect(mapStateToProps)(Home);

查看您的 mapStateToProps 函数和 Redux 记录器后,您的问题很可能出在组件本身。如果您要在组件中渲染 this.props.loading,您应该看到 true,然后看到 false

此外,我发现您的 chunkedData 数组上没有初始状态。当您设置 tickets 对象的初始状态时,您应该将其设置为空数组。

所以你的 reducer 的前几行应该是这样的:

const tickets = (
  state = {
    isLoading: false,
    chunkedData: [],
    // Need more info to know what would go in this object
    completeData: {} 
  },
  action
) => {

看看是否可以在 componentWillReceiveProps 生命周期方法中看到 props 的变化。您应该能够 console.log() nextProps,只要 props 发生变化,它就会发生变化。

在此处了解有关生命周期方法的更多信息:http://busypeoples.github.io/post/react-component-lifecycle/

关于reactjs - react Redux : Component not updated after connecting to redux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42065633/

相关文章:

react-native - 使用 redux 从 native react 的 API 中获取数据

javascript - ListView.DataSource是如何使用的?

javascript - 如何在带有冒号的 ReactJS 中使用动态路由

reactjs - 创建react-redux布局 header 组件的更好方法

html - 基于认证安全问题的条件渲染

javascript - 我如何选择元素以在模态宏上进行 react 选择

reactjs - 带有 TypeScript 的 React-router-dom

css - 如何在 REACT(包含在 index.js 文件中)中优先选择我的样式表而不是 Bootstrap ?

rest - API设计: Caching “partial” nested objects

javascript - 将 ES6 Map 与 React 和/或 Redux 一起使用