React 学习笔记_26(在React中使用Redux - 2)

简介

上一篇中提到了React与Redux的结合并且设计了Component的阶层,本篇将照着设计好的Component进行实作。

Action Creater

建立产生Action的Function,包含 :

加入新Todo的Action设定筛选Filter的Action指定id Todo 的Action
let nextTodoId = 0;//新增Todo的Actionexport const addTodo = (text) => {    return{        type : "ADD_TODO",        id : nextTodoId++,        text    }};//设定筛选Filter的Acitonexport const setVisibilityFilter = (filter) => {    return {      type: 'SET_VISIBILITY_FILTER',      filter    }};//指定id Todo 的Actionexport const toggleTodo = (id) => {    return {      type: 'TOGGLE_TODO',      id    }};

Reducer

建立处理Action的Reducer,包含 :

处理Todos的Reducer

新增新的Todo物件改变指定Todo的Completed状态

处理visibilityFilter的Reducer

改变筛选的Filter
import { combineReducers } from 'redux'//将Reducer拆分const todo = (state = {}, action) => {    switch (action.type) {      case 'ADD_TODO':        return {          id: action.id,          text: action.text,          completed: false        }      case 'TOGGLE_TODO':        if (state.id !== action.id) {          return state        }          return Object.assign({}, state, {          completed: !state.completed        })        default:        return state    }}    const todos = (state = [], action) => {    switch (action.type) {      //呼叫todo function,新增新的todo到原本的Todos Array中       case 'ADD_TODO':        return [          ...state,          todo(undefined, action)        ]      //改变指定todo状态      case 'TOGGLE_TODO':        return state.map(t =>          todo(t, action)        )      default:        return state    }}  const visibilityFilter = (state = 'SHOW_ALL', action) => {    switch (action.type) {      case 'SET_VISIBILITY_FILTER':        return action.filter      default:        return state    }}//透过Redux的utility 将两个Reducer function结合为一个可以传递给createStore的单一reducers functionexport const todoApp  = combineReducers({    todos,    visibilityFilter})

index.js

import React from "react";import ReactDOM from "react-dom";import App from "./App";import { createStore } from "redux";import { Provider } from "react-redux";import todoApp from "./Store/Reducers"let store = createStore(todoApp);//透过getState观察目前state状态console.log(store.getState())ReactDOM.render(    <Provider store = {store}>        <App />    </Provider>,    document.getElementById("root"));

http://img2.58codes.com/2024/20124767Jxg4MMLo0m.png

参考资料 :
从Redux 的作者学习它


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章