react-redux useSelector() 钩子不起作用

时间:2021-06-08 05:47:15

标签: react-native redux-saga

我是 React Native 编程的新手。所以,请详细告诉我。谢谢。

calling use Selector

我在我的功能组件中调用 use Selector ,如下所示:

import { useDispatch, useSelector } from 'react-redux';
const AddAddressScreen = ({ navigation }) => {
    const dispatch = useDispatch();
    const data = useSelector(state => state);
    console.log(data + "happy Coding");

  return (
        <View style={styles.container}>
<View>
);
}

export default AddAddressScreen;

我的减速器看起来像这样

 case types.API_LOGIN_SUCCESS:
            if (action.result.result.mobile_verified === false) {
                return {
                    ...state,
                    onLoad: false,
                    result: action.result,
                    status: action.status,
                    error: null,
                    navigation: action.navigation.navigate("VerifyMNO")
                };
            } else {
                return {
                    ...state,
                    onLoad: false,
                    result: action.result,
                    status: action.status,
                    error: null,
                    navigation: action.navigation.navigate("AddAddress")
                };
            }

这里我的手机号码已经过验证,所以我转到地址屏幕。 我在哪里使用 Use Selector 这给了我一个错误。当我删除上面两行时,我的代码成功运行。

我的传奇是这样的

export function* watchLoginUserInfo() {
    yield takeLatest(types.LOGIN_USER, loginApiSaga) 
}

我的根传奇

import { all, fork } from 'redux-saga/effects';
import { watchLoginUserInfo,  } from './authenticationSagas';
function* rootSaga() {
    yield all([
        watchLoginUserInfo(),
    ])
}
export default rootSaga;

我的商店看起来像这样

import {createStore, applyMiddleware} from 'redux';
import rootReducer from '../redux/reducers/root-reducer.js'
import createSagaMiddleware from 'redux-saga';
import rootSaga from '../redux/sagas/rootSaga';

const sagaMiddleware = createSagaMiddleware();
const store = createStore(rootReducer, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(rootSaga);


export {store};

当我在我的代码中使用 Selector 钩子时,它会给我以下错误。 error 1 error 2, 3, 4

1 个答案:

答案 0 :(得分:0)

在 reducer 中使用 selectredux-saga 效果:https://redux-saga.js.org/docs/api/#selectselector-args

例如const selectedState = yield select(state => state);

useSelector 钩子用于函数组件内部。

编辑:由于上述似乎不是问题,我认为问题在于您从减速器内部调用导航功能。 Reducer 代码没有副作用,因此您不能从 reducer 内部调用 navigation.navigate(...)。这将需要在传奇代码中发生。它可能可以在 loginApiSaga 或由 API_LOGIN_SUCCESS 触发的专用传奇中完成。