博客
关于我
使用react-redux实现一个todolist小案例
阅读量:593 次
发布时间:2019-03-11

本文共 3155 字,大约阅读时间需要 10 分钟。

Redux Todolist 应用开发实例

Redux 是一种状态管理的库,能够帮助我们高效地管理应用程序中的数据。接下来,我们将从简单的 Redux 基础开始,逐步构建一个 Todolist 应用。


入口文件:TodoList.js

入口文件通常是应用程序的起点,以下是我们的 TodoList 组件:

import React, { Component } from 'react';import { connect } from 'react-redux';import TodoListUI from './TodoListUI';import { inputChange, clickButton, deleteItem } from './store/actions';class TodoList extends Component {  changeInputValue = (e) => {    this.props.inputChange(e);  };  clickBtn = () => {    this.props.clickButton();  };  deleteItem = (index) => {    this.props.deleteItem(index);  };  render() {    return (      
); }}export default connect( state => ({ list: state.list }), { inputChange, clickButton, deleteItem })(TodoList);

Redux 核心配置:store.js

Redux 的核心是 Store。通过 createStore 函数创建一个 Redux Store:

import { createStore, applyMiddleware } from 'redux';import thunk from 'redux-thunk';import { composeWithDevTools } from 'redux-devtools-extension';import reducers from './reducer';const store = createStore(  reducers,  composeWithDevTools(applyMiddleware(thunk)));export default store;

Action 类型定义:action-types.js

为了避免硬编码,我们将所有动作类型抽离到一个独立的文件中:

export const CHANGE_INPUTVALUE = 'change_input';export const DELETE_ITEM = 'delete_item';export const ADD_ITEM = 'add_item';

Action 实现:actions.js

定义与状态交互的动作:

import { CHANGE_INPUTVALUE, DELETE_ITEM, ADD_ITEM } from './action-types';export const inputChange = (e) => ({  type: CHANGE_INPUTVALUE,  value: e.target.value});export const clickButton = () => ({  type: ADD_ITEM});export const deleteItem = (index) => ({  type: DELETE_ITEM,  index});

Redux 纯函数:reducer.js

Redux 的另一个核心是 Reducer。它是一个纯函数,接受当前状态和动作,返回新的状态:

import { combineReducers } from 'redux';import { CHANGE_INPUTVALUE, DELETE_ITEM, ADD_ITEM } from './action-types';const defaultState = {  inputValue: '写 something',  list: ['金泰亨', '朴智旻', '金南俊']};function list(state = defaultState, action) {  if (action.type === CHANGE_INPUTVALUE) {    const newState = { ...state };    newState.inputValue = action.value;    return newState;  }  if (action.type === ADD_ITEM) {    const newState = { ...state };    newState.list.push(newState.inputValue);    newState.inputValue = '';    return newState;  }  if (action.type === DELETE_ITEM) {    const newState = { ...state };    newState.list.splice(action.index, 1);    return newState;  }  return state;}export default combineReducers({  list: list});

UI 组件:TodoListUI.js

最后,UI 组件负责显示实际的 TodoList 界面:

import React, { Component } from 'react';import 'antd/dist/antd.css';import { Input, Button, List } from 'antd';import { ToString } from 'react-redux'; // ROI: 注意此处class TodoListUI extends Component {  render() {    const { inputavigateValue, list, changeInputValue, clickBtn, deleteItem } = this.props;    return (      
(
deleteItem(index)} key={index} > {item}
)} />
); }}export default TodoListUI;

通过以上配置,我们已经完成了一个完整的 Todolist 应用。用这个案例可以快速掌握 Redux 的基本使用方法,同时也了解如何通过组合多个 Redux 库来构建复杂的状态管理方案。

转载地址:http://fuitz.baihongyu.com/

你可能感兴趣的文章
Python subprocess.Popen() 等待完成
查看>>
Python sum 二维列表中具有相同第一个值的元素
查看>>
Python Sympy模块NoConversion:收敛到根失败;请尝试n<;15或MaxSteps>;50
查看>>
Python sys.MODULES包含尚未导入的模块
查看>>
python sys模块使用
查看>>
Python tarfile、zipfile解压模块讲解
查看>>
python tcp server传输成功之后进行删除_python学习之路(三)使用socketserver进行ftp断点续传...
查看>>
python车牌识别系统+车辆管理+计费系统(图像识别)django框架 计算机毕业设计
查看>>
Python threading.Thread 只能使用私有方法 self.__Thread_stop() 停止
查看>>
python time模块
查看>>
Python Tkinter Multiple Windows 教程
查看>>
Python tkinter 中的多处理
查看>>
python tkinter 按钮颜色_Python3 tkinter基础 Button bg 按钮的背景颜色
查看>>
Python Tkinter 笔记本小部件
查看>>
Python Tkinter 网格复选框
查看>>
Python TLS版本匹配
查看>>
python车牌精确定位
查看>>
python try except finally_Python3基础 try-except-finally 的简单示例
查看>>
Python Turtle图形窗口不显示任何内容
查看>>
Python tweepy写入到sqlite3 db
查看>>