React 学习笔记_28(在React中使用Redux - 4)

简介

上一篇中我们已经将AddTodo建立好并且确认Reducer会产生新的state,接下来要建立将Todo物件显示在UI的组件,由于TodoList只负责渲染画面并且接收到的数据均是来自props,所以它是属于Presentational Component,而VisibleTodoList是要进行筛选Filter的逻辑处理,所以归类为Container Component。

VisibleTodoList.js

藉由mapDispatchToProps会在state发生改变(新增新的todo物件)时会自动调用,将新增的todos Array带入getVisibleTodos function中进行Filter的逻辑判断,以Filter的型态决定显示那些Todo物件,而筛选过后的todos会透过connect传递给TodoList进行UI选染。

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

import { connect } from "react-redux";import { toggleTodo } from "../Store/Action/Action";import TodoList from "../Presentational Component/TodoList";const getVisibleTodos = (todos, filter) => {    switch (filter) {      case 'SHOW_ALL':        return todos      case 'SHOW_COMPLETED':        return todos.filter(t => t.completed)      case 'SHOW_ACTIVE':        return todos.filter(t => !t.completed)    default:            break;    }};//当State更新后自动调用const mapStateToProps = (state) => {    /*将State中的todo传入getVisibleTodos function进行筛选Filter逻辑判断,    return判断结果给todos中*/    return {      todos: getVisibleTodos(state.todos, state.visibilityFilter)    }};//将onTodoClick传递给Presentational Components作为callbackconst mapDispatchToProps = (dispatch) => {    return {      onTodoClick: (id) => {        dispatch(toggleTodo(id))      }    }}  //筛选过后的todos与callback藉由connect传递给TodoListconst VisibleTodoList = connect(    mapStateToProps,    mapDispatchToProps)(TodoList)  export default VisibleTodoList

TodoList.js

从VisibleTodoList进行逻辑判断后,将筛选玩的Todos与callback function藉由connect传递给TodoList,TodoList再将收到的props进行UI选染。

import React from "react";import Todo from "./Todo";const TodoList = (props) => {    console.log(props) //藉由console查看传递到TodoList的props内容    return(        <ul>            {                props.todos.map(todo =>                     <Todo                         key={todo.id}                        {...todo}                        onClick={()=> props.onTodoClick(todo.id)}                    />                )            }        </ul>    )};export default TodoList;

TodoList的props是筛选过后的Todos与onClick callback function
http://img2.58codes.com/2024/20124767kySANK1Q9A.png

Todo.js

import React from "react";const Todo = (props) => {    return(        <li            onClick={props.onClick}            style={{                textDecoration: props.completed ? 'line-through' : 'none'            }}        >            {props.text}        </li>    )};export default Todo;

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


关于作者: 网站小编

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

热门文章