IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> TodoList之Redux初体验 -> 正文阅读

[JavaScript知识库]TodoList之Redux初体验

“todolist的Redux实现至少要默写五遍哦”,Dell Lee老师用最温柔的语气说最狠的话~
好嘞,老师,我这就去
效果图
todolist
代码
index.js就不粘了

import React,{Component} from 'react';
import {Input,Button,List} from 'antd';
import store from "./store/store";
import 'antd/dist/antd.css';
import './App.css';
import {getInputChangeAction,getBtnClick,deleteItem} from "./store/ActionCreators";


class TodoList extends Component{
    constructor(props) {
        super(props);
        this.state={
            inputValue:'',
            list:[]
        }
        this.handleInputChane=this.handleInputChane.bind(this);
        this.handleBtnClick=this.handleBtnClick.bind(this);
        this.handleStoreChange=this.handleStoreChange.bind(this);
        store.subscribe(this.handleStoreChange);
    }
    render() {
        return (
            <div>
                <div>
                    <Input
                        style={{width:'300px',marginTop:"10px",marginRight:'10px',marginLeft:'10px'}}
                        value={this.state.inputValue}
                        onChange={this.handleInputChane}
                    />

                    <Button
                        onClick={this.handleBtnClick}
                    >
                    添加
                    </Button>
                </div>
                <List
                    style={{width:'300px',marginTop:'10px',marginLeft:'10px'}}
                    dataSource={this.state.list}
                    renderItem={(item,index)=>(
                        <List.Item
                            style={{marginLeft:'10px'}}
                            onClick={this.handelItemClick.bind(this,index)}
                        >{item}
                        </List.Item>
                    )}
                />
            </div>
        );

    }
    handleInputChane(e){
        const action=getInputChangeAction(e.target.value)
        store.dispatch(action)

    }
    handleBtnClick(){
        const action=getBtnClick();
        store.dispatch(action)

    }
    handelItemClick(index){
        const action=deleteItem(index)
        store.dispatch(action)

    }
    handleStoreChange(){
        this.setState(store.getState());
    }
}

export default TodoList;

store文件夹中内容
1.store.js

import {createStore} from "redux";
import reducer from "./reducer";


const store=createStore(reducer,

    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());

export default store;

reducer.js

import {ADDITEM,DELETEITEM,CHANGEINPUT} from "./ActionType";
const defaultState={
    inputValue:'',
    list:[]
}

export default (state=defaultState,action)=>{
    if (action.type === CHANGEINPUT){
        const newState=JSON.parse(JSON.stringify(state))
        newState.inputValue=action.value
        return newState;
    }
    if (action.type===ADDITEM){
        const newState=JSON.parse(JSON.stringify(state))
        newState.list.push(newState.inputValue);
        newState.inputValue='';
        return newState;
    }
    if (action.type===DELETEITEM){
        const newState=JSON.parse(JSON.stringify(state));
        newState.list.splice(action.index,1);
        return newState;
    }
    return state;

}

ActionType.js

export const CHANGEINPUT='input_change';
export const ADDITEM='add_item';
export const DELETEITEM='delete_item';

ActionCreators.js

import {CHANGEINPUT,ADDITEM,DELETEITEM} from "./ActionType";

export const getInputChangeAction = (value) => ({
    type:CHANGEINPUT,
    value
});

export const getBtnClick = ()=>({
    type:ADDITEM
})

export const deleteItem = (index) => ({
    type:DELETEITEM,
    index
})

又是在半夜更,又是匆匆忙忙写,我也不想啊
整个过程步骤:

  1. npx create-react-app todolist-redux-re

  2. cd todolist-redux-re

  3. npm install antd --save

  4. npm install redux --save

  5. npm start

  6. 删除多余文件,精简项目

  7. import React,{Component} from ‘react’

  8. 修改代码,初始化等

  9. 引入 antd的css文件,以及组件

  10. 构建组件 ,添加事件方法,修改this域指针。

  11. 创建store文件夹,并创建store.js,ActionType.js,ActionCreators.js,reducer.js文件
    ActionType中记录每个action中type的值;ActionCreators.js文件中存放产生action的方法,需要importActionType的types;app.js需要引入store,ActionCreators.js,store再dispatch这些action;store文件中需要引入reducer。

    容易犯的错误:

    1. 忘记引入’antd/dist/antd.css’
    2. Button的onClick事件绑定错误 this.handleBtnClick写成this.state.handleBtnClick。state身上没有方法的啊喂
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:05:01  更:2021-09-06 11:05:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:15:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码