我是 React Native 编程的新手。所以,请详细告诉我。谢谢。
我在我的功能组件中调用 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
答案 0 :(得分:0)
在 reducer 中使用 select
的 redux-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
触发的专用传奇中完成。