Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Redux是否自动更新其连接的React组件?_Reactjs_Redux_Components_Store_Reducers - Fatal编程技术网

Reactjs Redux是否自动更新其连接的React组件?

Reactjs Redux是否自动更新其连接的React组件?,reactjs,redux,components,store,reducers,Reactjs,Redux,Components,Store,Reducers,我的印象是,当我的Redux存储得到更新时(通过向reducer发送操作),我的提供者应该让新存储对它的所有子组件都可用。因此,当我使用mapStateToProps()将容器组件连接到存储时,该组件在接收到随存储一起更新的新道具时应该重新渲染,而不需要componentWillReceiveProps()。我这样想是不是错了 在阅读了几个小时的文档和其他堆栈溢出的答案后,我觉得有些东西不对劲。我非常确定我的reducer工作正常,正在返回一个新对象,我的组件可以访问存储,我的初始状态是渲染良好

我的印象是,当我的Redux存储得到更新时(通过向reducer发送操作),我的提供者应该让新存储对它的所有子组件都可用。因此,当我使用mapStateToProps()将容器组件连接到存储时,该组件在接收到随存储一起更新的新道具时应该重新渲染,而不需要componentWillReceiveProps()。我这样想是不是错了

在阅读了几个小时的文档和其他堆栈溢出的答案后,我觉得有些东西不对劲。我非常确定我的reducer工作正常,正在返回一个新对象,我的组件可以访问存储,我的初始状态是渲染良好。如果有人能给我一个更好的关于事物流动的想法,我将永远感激

基本上,我有一个头部组件,用于导入存储、使用提供者并呈现“FAQ”组件:

import React from 'react'; 
import FAQ from './Faq';
import {Provider} from "react-redux";
import  store  from '../store/index'

class Header extends React.Component {
    render() {
        return (
                <Provider store = {store}>
                    <FAQ  />
                </Provider>
        )
    }
}
export default Header;
下面是我的根减速机和combineReducers()函数:

import { combineReducers } from "redux";
import faq from './faqReducer'

export default combineReducers({
  faq: faq
});

问题是,您正在将数据从道具复制到状态,但仅在安装组件时才这样做,然后期望在新道具到达时以某种方式更新状态

。请不要那样做。只需使用道具的价值

关于改进该准则的另外两项建议:

  • 更喜欢使用,而不是将其作为函数编写
  • 我们建议使用我们的新官员作为编写Redux逻辑的标准方式。它包括简化几个常见Redux用例的实用程序,包括存储设置、定义缩减器、不可变更新逻辑,甚至一次创建整个状态“切片”

非常感谢您的回答!我见过很多例子,包括使用redux在state中增加一个简单计数器,我惊讶地发现这不是正确的方法。但是,我应该使用道具,因为没有必要更新我的状态。你当然可以有一个由Redux控制的计数器值,但是是的,你的组件应该继续使用Redux存储中的值。根据您使用的API的不同,它可以通过
connect
作为道具传入,也可以通过
useSelector
const counter=useSelector(state=>state.counter)
那样从存储中读取。
const initialState = {
    breakfast: ["eggs", "bacon"]
  }

export default function faqReducer(state = initialState, action) {

  switch (action.type) {
    case "ADD_FOOD":
      return Object.assign({}, state, {
        breakfast: [...state.breakfast, action.food]
      })
    default:
      return state;
  }
}

import { combineReducers } from "redux";
import faq from './faqReducer'

export default combineReducers({
  faq: faq
});