Reactjs 错误:操作必须是普通对象。对非api调用更新的异步操作使用自定义中间件
我试图在没有任何同步操作的情况下管理单个状态,但面临此错误。 这是我的Reactjs 错误:操作必须是普通对象。对非api调用更新的异步操作使用自定义中间件,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我试图在没有任何同步操作的情况下管理单个状态,但面临此错误。 这是我的store.js: import { createStore } from "redux"; import reducer from "./../reducers"; const initialState = { todolist: [] }; export const store = createStore(reducer, initialState); 这是我的action.js: export const setTo
store.js
:
import { createStore } from "redux";
import reducer from "./../reducers";
const initialState = { todolist: [] };
export const store = createStore(reducer, initialState);
这是我的action.js
:
export const setTodolist = listitem => {
({ type: "SET_TODOLIST", todolist: listitem })
};
这是我的reducer.js:
export default (state, action) => {
console.log(state , "reducer")
switch (action.type) {
case "SET_TODOLIST":
return {
...state,
todolist: [...state, action.todolist]
};
default:
return state;
}
};
最后,这是我的组件:
import { store } from "./../redux/store";
import { setTodolist } from '../redux/actions';
export default class Mylist extends React.Component {
render() {
return (
<input placeholder="username"
name="inputval" />
<button className="mt-4" color="success" onClick={dispatchBtnAction} >Add Todo</button>
)
}
}
function dispatchBtnAction(e) {
const val = document.getElementsByName("inputval").value;
store.dispatch(setTodolist({val}))
}
从“/./redux/store”导入{store};
从“../redux/actions”导入{setTodolist};
导出默认类Mylist扩展React.Component{
render(){
返回(
添加待办事项
)
}
}
功能分派(e){
const val=document.getElementsByName(“inputval”).value;
store.dispatch(setTodolist({val}))
}
您知道问题出在哪里吗?您操作的语法不正确。使用当前语法,指定的对象只是一个不会返回的代码块。你要么像这样写
export const setTodolist = listitem => (
{ type: "SET_TODOLIST", todolist: listitem })
);
或
更正我的操作=>TypeError:传播不可写实例的尝试无效可能是因为
todolist:[…state,action.todolist]
应该是todolist:[…state.todolist,action.todolist]
和store.dispatch(setTodolist({val}))
应该是store.dispatch(setTodolist(val))
我是react和redux的新手。这解决了我的问题。非常感谢:)
export const setTodolist = listitem => {
return { type: "SET_TODOLIST", todolist: listitem }
};