【发布时间】:2020-04-25 15:05:52
【问题描述】:
我尝试创建一个 Redux,但当我尝试执行调度时遇到问题无法正常工作。
动作文件,userActions.js:
export const setId = () => {
console.log("Enter to set id func");
return {
type: 'SET_ID'
}
}
Reducer 文件,userReducer.js:
const INITIAL_STATE = {
id: "",
email: "",
name: "",
};
const userReducer = (state = INITIAL_STATE, action) => {
console.log('Enter to userReducer');
switch (action.type) {
case "SET_ID": {
// console.log(action.payload);
}
default: {
return state;
}
}
}
export default userReducer;
combineReducers 文件:
import userReducer from "./userReducer";
import { combineReducers } from "redux";
const allReducers = combineReducers({
userReducer: userReducer
})
export default allReducers;
App.js 文件:
import React from 'react';
import Routes from "./Routes";
import { createStore } from "redux";
import allReducer from "./app/reducers";
import { Provider } from "react-redux";
const store = createStore(
allReducer
);
const App = () => {
return (
<Provider store={store}>
<Routes />
</Provider>
);
};
export default App;
在登录屏幕文件中,当我单击他调用以调度到“setId”操作时,我有按钮。
这是我的一些来自 Login.js 的代码:
import { useDispatch } from 'react-redux';
import { setId } from '../actions/userActions';
handleLoginResult = (error, user) => {
console.log('Enter to handleLoginResult');
if (error !== "") {
this.setState({ generalError: error });
} else {
const dispatch = useDispatch();
console.log('uid: ', user.user.uid);
dispatch(setId());
alert("Login!");
}
}
什么问题,为什么不进入 setId 操作?
【问题讨论】:
-
根据您对
this.setState()的使用判断,这是一个基于类的组件。你不能在基于类的组件中使用 React 钩子(如useDispatch()),你必须使用connect()而不是将dispatch函数注入到this.props中(使用 mapDispatchToProps 在我标记的副本中是可选的替代)
标签: reactjs react-native redux react-redux