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 相关文章推荐
JavaScript 事件查询综合
Jul 13 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
Dec 28 Javascript
JS实现两周内自动登录功能
Mar 23 Javascript
jQuery ajax动态生成table功能示例
Jun 14 jQuery
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
Jul 13 jQuery
在Vue组件中获取全局的点击事件方法
Sep 06 Javascript
小程序兼容安卓和IOS数据处理问题及坑
Sep 18 Javascript
vue环形进度条组件实例应用
Oct 10 Javascript
vue权限问题的完美解决方案
May 08 Javascript
javascript网页随机点名实现过程解析
Oct 15 Javascript
vue 点击其他区域关闭自定义div操作
Jul 17 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
vue实现标签云效果的示例
2020/11/09 Javascript
python 实现堆排序算法代码
2012/06/05 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
2014年学生会主席工作总结
2014/11/07 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
mysql查询结果实现多列拼接查询
2022/04/03 MySQL