我是 react-redux 的新手,reducer 和 store 之間的通信有問題。
這是我基于的想法:
我有一個組件“登錄”,它包含一個按鈕和兩個文本輸入,當我單擊它時,我將操作發送到減速器。然后,我更新狀態,并將其再次發送到 UI(這就是我理解邏輯的方式,如果我錯了,請糾正我)。問題出現在減速器中,它從不進入那里,但在操作檔案中是的(用 console.logs 測驗)。也許連接不起作用?還是在商店的一部分?
在這里,我分離了我是如何做到的
action.js,只有兩個操作
const logout = () => {
return {
type: "USER_LOGOUT",
payload: false,
};
};
const login = () => {
return {
type: "USER_LOGIN",
payload: true,
};
};
export { logout, login };
reducer.js 實作,只改變一個布林值
const initialState = {
logged: false,
};
export default (state = initialState, action) => {
if (action.type === "USER_LOGOUT") {
return {
...state,
logged: false,
};
}
if (action.type === "USER_LOGIN") {
return {
...state,
logged: true,
};
}
return state;
};
index.js(商店),這是我宣告商店部分的方式
import { createStore, combineReducers } from "redux";
import loginReducer from "./reducer";
const reducers = combineReducers({
loginReducer,
});
const store = createStore(reducers);
export default store;
Login.js,只有可觸摸的部分
import { logout, login } from "../redux/actions";
import { connect } from "react-redux";
...
connect(null, { logout, login }, Login);
...
<TouchableOpacity>
...
onPress={() => checkValidation()}
...
</TouchableOpacity>
這里checkValidation,誰呼叫動作“login”
checkValidation() =>
...
login();
...
uj5u.com熱心網友回復:
您沒有發送操作。為了讓 Redux 知道一個動作,你必須調度它。
如果您使用的是類組件,則需要連接該組件并將 redux 的調度操作傳遞給它。
我建議你使用鉤子,因為它更容易。
1-匯入 useDispatch 鉤子
import { useDispatch } from "react-redux";
2-創建調度:
const dispatch = useDispatch();
3-調度您的操作:checkValidation() =>
...
// Since your function login already returns the action object:
dispatch(login());
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457384.html
