使用react-redux实现todolist的增删改

本文档指导如何使用react-redux创建一个todolist应用。首先通过npm创建react项目,然后安装react-redux。接着建立store来处理数据传输,接着在src目录下创建组件,包括actionCreator和reducer。最后,实现todolist的增删改功能,具体涉及actionCreator的编写、组件的渲染及事件绑定,以及reducer的处理逻辑。

1.创建一个react项目

(1).npm i create-react-app -g
(2).create-react-app xxx(项目名称)
(3).cd xxx
(4.).npm start
启动项目后会浏览器会自动打开页面
出现react的标志即为打开成功

2.安装react-redux

运行npm i redux react-redux --save-dev

3.建立store用于数据传输

在App.js文件中引入
import {Provider} from ‘react-redux’
import store from ‘./store’

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import {Provider} from 'react-redux'
import store from './store'

ReactDOM.render(
<Provider store={store}>
   <App />
</Provider>   , document.getElementById('root'));

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();

并使用将包裹起来

在store文件中建立总的reducer文件

4.在src中建立组件

1.在src中建立todos文件,其中分别建立actionCreator文件用来书写行为代码以及tdos的单独reducer文件
2.在store文件的index.js文件中引入

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

var store =createStore(reducer);

export default store;

并在store文件夹中的reducer文件中引入

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

var store =createStore(reducer);

export default store;

5.实现todolist

(1).index文件中引入

import actionCreator from './actionCreator'
import {connect} from 'react-redux'

(2).在class Todos extends Component中书写

class Todos extends Component {
      add=(e)=>{
          if(e.keyCode===13){
              if(e.target.value.trim()==="")return;
              this.props.addAction(e.target.value);
              e.target.value=""
          }
      }

      delete(id){
          let result = window.confirm("是否删除")
          if(result===true){
           this.props.delAction(id)
          }
      }

      write(id){
        var text =  prompt("请输入要修改的内容")
         if(text !==""){
           this.props.writeAction(text,id)
         }
      }

    render() {
        let todos = this.props.TodosMod.todos
        return (
            <div>
                <input  type="text" onKeyUp={this.add}/>
                <ul>
                    {
                    todos.map((item)=>{
                        return <li key={item.id} >{item.text} 
                        <button onClick={()=>{this.delete(item.id)}}>删除</button> 
                        <button onClick={()=>{this.write(item.id)}}>修改</button></li>
                    })
                 }
                </ul>
            </div>
        )
    }
}

render中的u组件绑定数据,并在其中写好事件。
最后再导出

var mapState=(state)=>state
export default connect(mapState,actionCreator)(Todos);

(3).actionCreator文件中写入

export default {
    addAction(text){
        return{
            type:"ADD",
            text
        }
    },
    delAction(id){
        return{
            type:"DEL",
            id
        }
    },
    writeAction(text,id){
        return{
        type:"WRITE",
        text,
        id
        }
    }
}

(4).最后在reducer文件中写入

const initialState = {
    todos:[
        {
            "id":1,
            "text":"hello twohorses"
        }
    ]
}

export default (state = initialState,{type,text,id})=>{
    switch(type) {
        case "ADD":
            var newState = {...state};
            newState.todos.push({
                id:Date.now(),
                text
            })
            return newState;
        case "DEL":
            newState = {...state};
            newState.todos.splice(text,1);
            return newState;

        case "WRITE":
            newState = {...state};
            newState.todos.filter((item)=>{
                if(id === item.id){
                  item.text = text  
                }
                return newState;
            })
            return newState;

     default :
         return state
    }
}

在这里插入图片描述最终效果

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值