React实现todolist功能


Posted in Javascript onDecember 28, 2020

一、index.js

ReactDOM.render(
 <React.StrictMode>
  <TodoList />
 </React.StrictMode>,
 document.getElementById('root')
);

二、TodoList

1、constructor

constructor(props) {
    super(props);
    this.state = {
      inputValue: '',
      list: []
    }
  }

2、render

render() {
    return (
      <React.Fragment>
        <div>
          {/*label标签的作用,扩大点击范围*/}
          <label htmlFor='insertArea'>输入内容</label>
          <input
            id='insertArea'
            className={'inputStyle'}
            value={this.state.inputValue}
            onChange={event => this.handleInputChangle(event)}/>
          <button onClick={event => this.handleButtonVlue(event)}>提交</button>
          <hr/>
          <ul>
            {this.getTodoList()}
          </ul>
        </div>
      </React.Fragment>
    )
  }

3、getTodoList

getTodoList() {
    return (
      this.state.list.map((value, index) => {
        return <TodoItem2
          key={index}
          itemVlue={value}
          itemIndex={index}
          itemDelete={this.handleItemDelete.bind(this)}>
          {/*这块需要强制绑定为父组件的this,否则在子组件中找不到*/}
        </TodoItem2>
      })
    );
  }

4、事件函数

/**
   * 监听输入框变化
   **/
  handleInputChangle(e) {
    const value = e.target.value;
    this.setState(() => ({
      inputValue: value
    }))
  }
 
  /**
   * 监听点击按钮
   **/
  handleButtonVlue(e) {
    this.setState((prevStatus) => ({
      list: [...prevStatus.list, this.state.inputValue],
      inputValue: ''
    }))
  }
 
  /**
   * 监听点击item删除
   **/
  handleItemDelete(index) {
    this.setState((preStatus) => {
      const list = [...preStatus.list];
      list.splice(index, 1)
      return {
        list
      }
    });
  }

5、网络请求

使用Charles代理网络,安装证书,设置端口,在手机上面打开网络WIFI,设置代理IP和端口,这样就能监听到手机访问的网络,拦截请求,代理本地地址,返回本地数据。

React实现todolist功能

需要注意的是charles识别不出来localhost,需要在package.json中改成设置:

* "start": "set PORT=3000 HOST=localhost.charlesproxy.com && react-scripts start",

访问时候使用:

http://localhost.charlesproxy.com:3000/

(1)引入axios

yarn yarn add axios 

(2)在componentDidMount进行网络请求

/**
   * 这块进行网络请求
   */
  componentDidMount() {
    axios.get('api/todolist')
      .then((res) => {
        this.setState({
          list: [...res.data]
        })
      }).catch(() => {
      alert('发生错误')
    })
  }

这样运行程序的时候初始值就有了数据了。

总结:当前组件的state或者prop发生改变的时候,App中的render函数就会重新执行。做到数据和页面同步。当父组件发生变化重新执行的时候,子组件的render也会被重新执行一次。

到此这篇关于React实现todolist功能的文章就介绍到这了,更多相关React实现todolist内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jqPlot jquery的页面图表绘制工具
Jul 25 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
控制台报错object is not a function的解决方法
Aug 24 Javascript
javascript函数声明和函数表达式区别分析
Dec 02 Javascript
JavaScript对数字的判断与处理实例分析
Feb 02 Javascript
jQuery数据类型小结(14个)
Jan 08 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
May 30 Javascript
JavaScript函数基础详解
Feb 03 Javascript
EasyUI为Numberbox添加blur事件的方法
Mar 05 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
Jul 14 Javascript
vue中eslintrc.js配置最详细介绍
Dec 21 Javascript
JS轮播图的实现方法2
Aug 25 Javascript
mustache.js实现首页元件动态渲染的示例代码
Dec 28 #Javascript
11个Javascript小技巧帮你提升代码质量(小结)
Dec 28 #Javascript
vue中watch的用法汇总
Dec 28 #Vue.js
浅析vue中的nextTick
Dec 28 #Vue.js
js仿淘宝放大镜效果
Dec 28 #Javascript
JavaScript实现原型封装轮播图
Dec 27 #Javascript
JavaScript代码实现简单计算器
Dec 27 #Javascript
You might like
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
将数组写入txt文件 var_export
2009/04/21 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
跟我学Laravel之路由
2014/10/15 PHP
js Event对象的5种坐标
2011/09/12 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
网络信息安全承诺书
2014/03/26 职场文书
考察邀请函范文
2015/01/31 职场文书
小学毕业教师寄语
2019/06/21 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏
移除Selenium中window.navigator.webdriver值
2022/06/10 Python