React redux 和 reducer 的问题
Issue with react redux and reducer
我是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,谁调用了“登录”这个动作
checkValidation() =>
...
login();
...
您没有调度操作。要让 Redux 知道一个动作,你必须调度它。
如果您使用的是 class 组件,则需要 connect the component and pass it the dispatch action from 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());
...
我是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,谁调用了“登录”这个动作
checkValidation() =>
...
login();
...
您没有调度操作。要让 Redux 知道一个动作,你必须调度它。
如果您使用的是 class 组件,则需要 connect the component and pass it the dispatch action from 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());
...