我在React挂钩中还很陌生,我试图用connect
,mapStateToProps
替换useSelector
,useDispatch
等。这就是我所拥有的:
import React from 'react';
import { useSelector } from 'react-redux';
function MyComponent(props) {
const data = useSelector(state => state.app.loadingData);
return (
<div>
{data}
</div>
);
}
根据https://react-redux.js.org/api/hooks,其中写得很好。这是我的Redux DevTools控制台:
因此,app
存在于redux状态树中,loadingData
也存在。无论如何,我的浏览器控制台都指向const data = useSelector(state => state.app.loadingData);
,叫我这是一个错误:
未捕获的TypeError:Object(...)不是函数
那么,我在做错什么还是在这里想念什么?
答案 0 :(得分:17)
我遇到了同样的错误,我发现我错过了导入的“useSelector”。我是从 react 而不是 redux 导入的。 :)
错误:
import React, { useState, useEffect, useSelector } from "react";
好方法:
import { useDispatch, useSelector } from "react-redux";
答案 1 :(得分:3)
检查您的react-redux版本,从7.1.0以后的版本中提供userSelector函数,以更新到上一次运行的版本:
yarn add react-redux
答案 2 :(得分:1)
解决方案:
也许不是最好的方法,还是最漂亮的方法,但对我来说是可行的解决方案:
const data = useSelector(state => state.getIn(['app', 'loadingData']);
希望这会有所帮助。请,如果可以改进此解决方案,则redux团队可能会在此处提供帮助。
答案 3 :(得分:0)
也许..没有Reducer状态的initialState?
initialState匹配数据深度
我遇到了同样的错误,并像这样解决了它
const initialState = { loadingData: null };
export default function (state = initialState, action) {
switch (action.type) {
...
}
}
https://redux.js.org/recipes/structuring-reducers/basic-reducer-structure