【发布时间】:2021-05-23 17:41:40
【问题描述】:
目前我正在学习 Redux 以使用 React 创建一个简单的待办事项应用程序。我就是这样做的
这是我的减速器和存储:
/redux/todo.js
const initialState = {
items: []
};
const ADD_TODO = "ADD_TODO";
export const addTodo = (text) => ({
type: ADD_TODO,
payload: text
});
const reducer = (state = initialState, action) => {
switch (action.type) {
case "ADD_TODO":
return {
...state,
items: [...state.items, action.payload]
};
default:
return state;
}
};
export default reducer;
/redux/store.js
import { createStore, combineReducers } from "redux";
import todoReducer from "./todo";
const reducer = combineReducers({
todo: todoReducer
});
export default createStore(reducer);
这是我用 redux 映射的组件:
/components/TodoApp.js
import React, { useState } from "react";
export default function TodoApp({ todos, addTodo }) {
const [text, setText] = useState("");
return (
<div>
<input
type="text"
value={text}
onChange={(e) => setText(e.target.value)}
/>
<button
onClick={() => {
addTodo(text);
}}
>
Add
</button>
<ul>
{todos.map((todo) => (
<li>{todo}</li>
))}
</ul>
</div>
);
}
这就是我将商店与 UI 绑定的方式:
/bindings/TodoApp.js
import { connect } from "react-redux";
import TodoApp from "../components/TodoApp";
import { addTodo } from "../redux/todo";
const mapStateProps = (state) => {
return {
todos: state.todo.items
};
};
const mapActionsToProps = {
addTodo
};
export default connect(mapStateProps, mapActionsToProps)(TodoApp);
然后我在根组件中导入它:
App.js
import "./styles.css";
import TodoApp from "./bindings/TodoApp";
export default function App() {
return (
<div className="App">
<TodoApp />
</div>
);
}
`
最后,我将 Redux 添加到索引文件中:
index.js
import { StrictMode } from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import { store } from "./redux/store";
import App from "./App";
const rootElement = document.getElementById("root");
ReactDOM.render(
<Provider store={store}>
<StrictMode>
<App />
</StrictMode>
</Provider>,
rootElement
);
这是我得到的错误:
请帮我处理一下,非常感谢,如果可以的话,请修改此codeandbox链接here中的代码
再次感谢您,祝您有美好的一天
【问题讨论】:
标签: javascript reactjs web redux react-redux