# 准备
这里使用 json-server
模拟后端数据, json-server
是一个基于 JSON 的 HTTP 服务器,用于快速创建 RESTful API。
在 reducer
中,我们使用 redux-thunk
来处理异步操作, redux-thunk
是一个中间件,它允许我们返回一个函数而不是一个对象,并在函数中可以进行异步操作。
# 示例
- 在
noteReducer
中,我们创建 initializenotes
和 createNoteAction
两个函数,分别用于初始化笔记列表和创建新的笔记。都是异步操作,所以使用了 redux-thunk
。调用时直接调用 dispatch
即可。
| export const initializeNotes = () => { |
| return async dispatch => { |
| const notes = await noteServiece.getAll() |
| dispatch(setNotes(notes)) |
| } |
| } |
| |
| export const createNoteAction = (content) => { |
| return async dispatch => { |
| const newNote = await noteServiece.createNew(content) |
| dispatch(createNote(newNote)) |
| } |
| } |
- 而相对应的函数,在
noteServiece
中,我们使用 axios
来模拟后端数据,并返回相应的数据。
| import axios from 'axios'; |
| |
| const baseUrl = 'http://localhost:3001/notes' |
| |
| const getAll = async () => { |
| const response = await axios.get(baseUrl) |
| return response.data |
| } |
| |
| const createNew = async (content) => { |
| const object = { content, important: false} |
| const response = await axios.post(baseUrl, object) |
| return response.data |
| } |
| |
| export default { |
| getAll, |
| createNew, |
| } |
- 在
App.js
中,我们使用 useEffect
来初始化笔记列表,并使用 useDispatch
来调用 initializeNotes
函数。
| const App = () => { |
| const dispatch = useDispatch() |
| useEffect(() => { |
| dispatch(initializeNotes()) |
| }, [dispatch]) |
| |
| |
| return ( |
| <div> |
| <NewNote /> |
| <VisibilityFilter /> |
| <Notes /> |
| </div> |
| ) |
| } |
- 我们把
store
商店注册提取到 index.js
中,简化 main.js
store.js
| import { configureStore } from '@reduxjs/toolkit' |
| |
| import noteReducer from './reducers/noteReducer' |
| import filterReducer from './reducers/filterReducer' |
| |
| const store = configureStore({ |
| reducer: { |
| notes: noteReducer, |
| filter: filterReducer |
| } |
| }) |
| |
| export default store |
main.js
| ReactDOM.createRoot(document.getElementById('root')).render( |
| <Provider store={store}> |
| <App /> |
| </Provider>, |
| |
| ) |