TypeError: dispatch is not a function when clicking the toggle button
TypeError: dispatch is not a function when clicking the toggle button
我正在使用 react redux-thunk。我有一组从 API 获得的用户数据,这是模式:
.
我已经将“active”属性 与 Switch MUI 按钮的 checked
属性连接起来,因此在调用 API 时自然会有一些用户使用他们的 switch 按钮已经在“真实”。我想做的是让开关正常工作,只需点击它并改变它的状态,而不一定要用它做任何事情。
这是我的 toggleType.js:
export const TOGGLE = "TOGGLE";
这是我的 toggleAction.js:
import { TOGGLE } from "./toggleType";
const statusToggleAction = () => {
return {
type: TOGGLE,
};
};
export const statusToggle = () => {
return (dispatch) => {
dispatch(statusToggleAction);
};
};
这是我的 toggleReducer.js:
import { TOGGLE } from "./toggleType";
const initialState = {
status: false,
};
const toggleReducer = (state = initialState, action) => {
switch (action.type) {
case TOGGLE:
status: true;
default:
return state;
}
};
export default toggleReducer;
一切都在我的userContainer.js之下,像这样:
function UserContainer({ userData, fetchUsers }) {
useEffect(() => {
fetchUsers();
}, []);
return userData.loading ? (
<h2>Loading</h2>
) : userData.error ? (
<h2>{userData.error}</h2>
) : (
<Container maxWidth="lg" style={{ flexGrow: 1, height: "100%" }}>
<h2>User List</h2>
<div>
{userData &&
userData.users &&
userData.users.map((user) => (
<div key={user.id}>
<p>{user.name}</p>
<Switch checked={user.active} onChange={statusToggle()} />
</div>
))}
</div>
</Container>
);
}
const mapStateToProps = (state) => {
return { userData: state.user, statusToggle: state.status };
};
const mapDispatchToProps = (dispatch) => {
return {
fetchUsers: () => dispatch(fetchUsers()),
statusToggle: () => dispatch(statusToggle()),
};
};
export default connect(mapStateToProps, mapDispatchToProps)(UserContainer);
这是我在单击其中一个开关时遇到的错误:
欢迎任何想法,我像 3 天前一样“学习”了 redux!
toggleReducer.js 中的 toggleReducer 函数,将 status: true;
替换为 return { status: true }
。
- 只是 return 在 toggleAction.js 中的
statusToggle
函数中的操作,没有如下调度。
export const statusToggle = () => {
return statusToggleAction();
};
- 或者直接在userContainer.js中调用
statusToggleAction
如下。
export const statusToggle = () => {
return (dispatch) => {
dispatch(statusToggleAction());
};
};
我正在使用 react redux-thunk。我有一组从 API 获得的用户数据,这是模式:
我已经将“active”属性 与 Switch MUI 按钮的 checked
属性连接起来,因此在调用 API 时自然会有一些用户使用他们的 switch 按钮已经在“真实”。我想做的是让开关正常工作,只需点击它并改变它的状态,而不一定要用它做任何事情。
这是我的 toggleType.js:
export const TOGGLE = "TOGGLE";
这是我的 toggleAction.js:
import { TOGGLE } from "./toggleType";
const statusToggleAction = () => {
return {
type: TOGGLE,
};
};
export const statusToggle = () => {
return (dispatch) => {
dispatch(statusToggleAction);
};
};
这是我的 toggleReducer.js:
import { TOGGLE } from "./toggleType";
const initialState = {
status: false,
};
const toggleReducer = (state = initialState, action) => {
switch (action.type) {
case TOGGLE:
status: true;
default:
return state;
}
};
export default toggleReducer;
一切都在我的userContainer.js之下,像这样:
function UserContainer({ userData, fetchUsers }) {
useEffect(() => {
fetchUsers();
}, []);
return userData.loading ? (
<h2>Loading</h2>
) : userData.error ? (
<h2>{userData.error}</h2>
) : (
<Container maxWidth="lg" style={{ flexGrow: 1, height: "100%" }}>
<h2>User List</h2>
<div>
{userData &&
userData.users &&
userData.users.map((user) => (
<div key={user.id}>
<p>{user.name}</p>
<Switch checked={user.active} onChange={statusToggle()} />
</div>
))}
</div>
</Container>
);
}
const mapStateToProps = (state) => {
return { userData: state.user, statusToggle: state.status };
};
const mapDispatchToProps = (dispatch) => {
return {
fetchUsers: () => dispatch(fetchUsers()),
statusToggle: () => dispatch(statusToggle()),
};
};
export default connect(mapStateToProps, mapDispatchToProps)(UserContainer);
这是我在单击其中一个开关时遇到的错误:
欢迎任何想法,我像 3 天前一样“学习”了 redux!
toggleReducer.js 中的 toggleReducer 函数,将 status: true;
替换为 return { status: true }
。
- 只是 return 在 toggleAction.js 中的
statusToggle
函数中的操作,没有如下调度。
export const statusToggle = () => {
return statusToggleAction();
};
- 或者直接在userContainer.js中调用
statusToggleAction
如下。
export const statusToggle = () => {
return (dispatch) => {
dispatch(statusToggleAction());
};
};