欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

React+Antd+Redux实现待办事件的方法

程序员文章站 2022-05-29 14:49:18
之前也是写过一篇关于redux的文章,来简单理解一下redux,以及该如何使用。今天我就来分享一个也是入门级别的,react+redux+antd来实现简单的待办事件。同时...

之前也是写过一篇关于redux的文章,来简单理解一下redux,以及该如何使用。今天我就来分享一个也是入门级别的,react+redux+antd来实现简单的待办事件。同时也讲讲自己对redux的理解。先来看一张图吧:

React+Antd+Redux实现待办事件的方法

我们简单的比喻来让我们更加好的理解redux,我们这样比喻(图书馆借书):
1.react component:借书人
2.action creators:你要说你要借书这句话,肯定要说话吧,就是一句话:我要借书
3.store:图书馆管理员
4.reducer:图书馆管理员肯定不可能记得所有书,那么reducer就是作为一本小册子,供图书馆管理员查

通俗理解:我要借书,我要先说话,告诉图书馆管理员我要借书,当图书馆管理员知道了之后,但是它不可能知道所有的书籍在哪里,所以需要一本小册子去找,最后找到了之后,再送到你手上。
专业术语理解:(component)要借书,我要先说话(action ),告诉图书馆管理员(store)我要借书,当图书馆管理员知道了之后,但是它不可能知道所有的书籍在哪里,所以需要一本小册子(reducer)去找,最后找到了之后,再送到你(component)手上。

当你看图觉得蒙的时候你再看看这个比喻是不是更好理解了?流程我们大概清楚了,我们就开始来看怎么写这个待办事项吧。
我们先来列一个提纲吧,屡清楚思路再写代码。
1.react component(todolist.js)
2.引入antd
3.写store
4.写reducer
5.写action

大概就是上面的一些流程:

如何引入antd呢?

官方文档:

文件目录结构如下:

React+Antd+Redux实现待办事件的方法

创建文件之前,首先创建图书馆管理员(store),他不知道书具体在哪里,所以再创建小册子(redux),给到图书馆管理员(store):

//src/redux/index.js
import {createstore} from 'redux';
import reducer from './reducer'

const store=createstore(reducer);


export default store;
//src/redux/reducer.js
const defaultstate={
  inputvalue:'',
  list:[1,2]
}
export default(state=defaultstate,action)=>{
  return state;
}

*注释:刚开始state,这里一定要给state赋一个初始值,才不会报错

接下来你就可以,在todolist.js中用store.getstate()获取到store的值,我把他直接赋值给状态:

React+Antd+Redux实现待办事件的方法

我先实现一个由component发送action,store收到action,在由reducer接受处理,最后返回一个新的状态,component接收显示:

//src/redux/todolist.js
import react from 'react';
import 'antd/dist/antd.css';
import { input,button,list} from 'antd';
import store from './index';
export default class todolist extends react.component{
  constructor(props){
    super(props);
    this.state=store.getstate();
  }
  componentdidmount(){
    console.log(this.state);
  }
  handlechg=(e)=>{
    const action={
      type:'change_input_value',
      inputvalue:e.target.value
    }
    store.dispatch(action);
  }
  render(){ 
    console.log(this.state)  
    return(
      <div style={{margintop:"10px",marginleft:"20px"}}>
        <input placeholder="请输入" style={{width:"400px",marginright:"10px"}} onchange={this.handlechg} value={this.state.inputvalue}/>
        </div>
      </div>
    );
  }
  
}

思路:我们通过input框中监听内容变化发送action,reucer去处理

//src/redux/reducer.js
const defaultstate={
  inputvalue:'',
  list:[1,2]
}

export default(state=defaultstate,action)=>{
  if(action.type==='change_input_value'){
    const newstate=json.parse(json.stringify(state))
    newstate.inputvalue=action.inputvalue;
    return newstate;
  }
  
  return state;
}

你可以打印出newstate看一下,你就会发现inputvalue就是你输入的值了。

接下来的就可以举一反三了。

完整代码:

///src/redux/index.js
import {createstore} from 'redux';
import reducer from './reducer'

const store=createstore(reducer);
///src/redux/reducers.js
export default store;

const defaultstate={
  inputvalue:'',
  list:[1,2]
}

export default(state=defaultstate,action)=>{
  if(action.type==='change_input_value'){
    const newstate=json.parse(json.stringify(state))
    newstate.inputvalue=action.inputvalue;
    return newstate;
  }
  if(action.type==='send_message'){
    const newstate=json.parse(json.stringify(state))
    newstate.list.push(newstate.inputvalue);
    newstate.inputvalue='';
    return newstate;
  }
  if(action.type==='delete_message'){
    const newstate=object.assign({},state);
    newstate.list.splice(action.index,1);
    return newstate;
  }
  return state;
}
///src/redux/todolist.js
import react from 'react';
import 'antd/dist/antd.css';
import { input,button,list} from 'antd';
import store from './index';
const data=[
  1,2,3
];
export default class todolist extends react.component{
  constructor(props){
    super(props);
    this.state=store.getstate();
    store.subscribe(this.f5)
  }
  componentdidmount(){
    console.log(this.state);
  }
  handlechg=(e)=>{
    const action={
      type:'change_input_value',
      inputvalue:e.target.value
    }
    store.dispatch(action);
  }
  handlesend=()=>{
    const action={
      type:'send_message',
    }
    store.dispatch(action);
  }
  f5=()=>{
    this.setstate(store.getstate());
  }
  handleitem=(index)=>{
    const action={
      type:'delete_message',
      index:index
    }
    store.dispatch(action);
  }
  render(){ 
    console.log(this.state)  
    return(
      <div style={{margintop:"10px",marginleft:"20px"}}>
        <input placeholder="请输入" style={{width:"400px",marginright:"10px"}} onchange={this.handlechg} value={this.state.inputvalue}/>
        <button type="primary" onclick={this.handlesend}>发送</button>
        <div style={{width:"400px",margintop:"10px"}}>
        <list
           bordered
           datasource={this.state.list}
           renderitem={(item,index) => (<list.item onclick={this.handleitem.bind(this,index)}>{item}</list.item>)}/>
        </div>
      </div>
    );
  }
  
}
//index.js
import react from 'react';
import reactdom from 'react-dom';
import './index.css';
import todolist from './redux/todolist';

reactdom.render(<todolist />, document.getelementbyid('root'));

这样就实现了一个利用redux来实现简单的待办事项.

相信你如果写完这个demo之后,肯定对redux大致有了了解。如果自己在写的过程中有什么疑惑,欢迎提出,我会给你解答。后期也会更新一些关于redux的其他方面的知识。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。