繁体   English   中英

使用选择器 State 未定义

[英]UseSelector State is Undefined

页面未呈现,引用TypeError: state is undefined ,追溯至SelectForm.js中的这一行: const filter = useSelector(state => state.filter); .

我花了几个小时试图弄清楚我做错了什么。 我已经尝试过 createSelector 但没有奏效。 我尝试发送“获取初始状态”操作,但没有成功。 该组件被包装在提供者标签中。 我不确定为什么我无法访问 state。 在这一点上,我看不到任何我一直在寻找它的缺陷。

代码片段

减速器.js

let initialState = {
    filter: {
        country: null,
        state: null,
        level: null,
        team: null
    },

    isDBConnecting: false, 
    isDBConnected: false, 
    isDBError: false 
}

const SelectorReducer = (state=initialState, action) => {
    switch (action.type) {        
        case 'DB_CONNECT_INIT':
            return {
                ...state,
                isDBConnecting: true,
                isDBConnected: false,
                isDBError: false,
            };
...
...
}

export default SelectorReducer;

动作.js

export const initializeDBConnection = () => {
    return {
        type: 'DB_CONNECT_INIT'
    }
};

父组件.js

import React from 'react';
import { createStore } from 'redux';
import { Provider } from 'react-redux'; //import provider to provide component access to the state

//Component imports
import SelectForm from './components/SelectForm'
import SelectorReducer from '.../reducer.js'

const SelectorStore = createStore(SelectorReducer);

const ParentComponent = () => {

    return (
        <div className="page-container">
            <div id="carousel">
                <div id="wrapper">
                    <Provider store={SelectorStore}>
                        <SelectForm />
                    </Provider>
                </div>
            </div>
    </div>
    )
}

SelectForm.js(子组件,包裹在上面的 Provider 标签中)

//IMPORTS
import React from 'react'; //import react
import { useSelector, useDispatch } from 'react-redux';

//COMPONENT IMPORTS
import FormGroup from '../FormGroup';
import { * as actions } from '.../actions.js';

const SelectForm = (props) => {

    //STATEFUL IMPORTS
    //filter
    const filter = useSelector(state => state.filter);

感谢@NicholasTower 评论中的答案。 我的减速器没有默认情况

default: return state

把它放进去解决了这个问题。

  let filter = useSelector(state => {
    console.log('State: ', state);
    return state.pieChart.filter;
  });

确保为 state 使用正确的state

添加一个用于调试的控制台并检查state object。 很多时候我们使用多个reducers ,这使得我们的组件state嵌套在全局 object 中。

在 ParentComponent.js 中,您说的是<Provider store={TeamSelectorStore}> 我想你的意思是说<Provider store={SelectorStore}>

有时减速器的开关块中断会导致 state 中未定义的道具。

由于大写/小写错误也可能发生此错误。

let horns = useSelector(state => state.largeRhinohorns);
let horns = useSelector(state => state.largeRhinoHorns);

我们应该通过以下方式导入 useSelector 表单 react-redux 然后 select 用户详细信息表单存储

import { useSelector } from 'react-redux'

const User = () => {

const userInfo= useSelector(state => state.user)

return <div>userInfo.name</div>

}

就我而言,我在 didMount 阶段存储来自 Redux state 的数据,而 Redux 状态尚未完全上传。

  const currentUser = useAuth();
  useEffect(() => {
    form.setFieldValue('email', currentUser.email);
  }, []);

currentUser添加到useEffect依赖数组,为我解决它:

  useEffect(() => {
    form.setFieldValue('email', currentUser.email);
  }, [currentUser]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM