编写 TodoList 功能

  react 入口 js

  #src/index.js

    import React from 'react';

    import ReactDOM from 'react-dom';

    import TodoList from './TodoList'

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

  #src/TodoList.js

    // Fragment 为占位符

    import React, { Component , Fragment } from 'react';

    class TodoList extends Component

    {

      render(){

        // 每一个 render 的 标签 只能返回一个标签 其他的都包含在这个标签内

        // 使用 Fragment 能 不然最外层元素 被渲染出来

        return (

          <Fragment>

            <input type='text' /> <button>提交</button>

            <ul><li>吃饭</li><li>睡觉</li><li>打豆豆</li></ul>

          </Fragment>

          );

      }

    }  // 导出 TodoList

    export default TodoList

  //添加 input change 事件

  # todoList.js

    import React, { Component , Fragment } from 'react';

    class TodoList extends Component

    {

      constructor( props ){

        // 必须 调用一次 父类 constructor 完成父类初始化

        super(props)

        //对 需要使用的 数据 进行定义 ( 定义在 this.state 下 )

        this.state = { inputValue: '' }

      }

      render(){

        return (

          <Fragment>

            {/* 定义该 文本框的 值 为 this.state.inputValue , 改变事件为 this.inputChange  并制定 该事件的 this 为 TodoList 这个类 */}

            <input type='text' value={this.state.inputValue}  onChange={this.inputChange.bind(this)} />

              <button>提交</button>

            <ul><li>吃饭</li><li>睡觉</li><li>打豆豆</li></ul>

          </Fragment>

          );

      }

      inputChange(e){

        // 设置 this.state.inputValue 的 值 等于 输入的值

        this.setState( {inputValue: e.target.value} );

      }

    }  // 导出 TodoList

    export default TodoList

  //添加 列表 增加删除功能

    import React, { Component , Fragment } from 'react';

    class TodoList extends Component

    {

      constructor( props ){

        // 必须 调用一次 父类 constructor 完成父类初始化

        super(props)

        //对 需要使用的 数据 进行定义 ( 定义在 this.state 下 )

        this.state = { inputValue: '', list: [] }

      }

      render(){

        return (

          <Fragment>

            {/* 定义该 文本框的 值 为 this.state.inputValue , 改变事件为 this.inputChange  并制定 该事件的 this 为 TodoList 这个类 */}

            <input type='text' value={this.state.inputValue}  onChange={this.inputChange.bind(this)} />

              {/* 添加点击事件 进行数据添加 */}

              <button onClick={this.addClick.bind(this)}>提交</button>

            <ul>

              {

                this.state.list.map((value, index)=>{

                  // 添加删除子项功能

                  return <li key={index} onClick={this.itemDelete.bind(this, index)}>{value}</li>

                })

              }

            </ul>

          </Fragment>

          );

      }

      inputChange(e){

        // 设置 this.state.inputValue 的 值 等于 输入的值

        this.setState( {inputValue: e.target.value} );

      }

      addClick(){

        // 点击之后 添加 输入框内的 value 到

        this.setState({

          list : [...this.state.list, this.state.inputValue],

          inputValue: ''

        })

      }

      itemDelete(index){

        // 根据 immutable 原则 state 内的 数值 不允许我们 做任何改变

        const list = [...this.state.list];

        list.splice(index, 1);

        this.setState({list:list});

      }

    }  // 导出 TodoList

    export default TodoList

4. react 基础 - 编写 todoList 功能的更多相关文章

  1. 14. react 基础 redux 的编写 TodoList 功能

    1. 安装 redux 监听工具 ( 需要翻墙 ) 打开 谷歌商店 搜索 redux devtool 安装第一个即可 2. 安装 redux yarn add redux 3. 创建 一个 store ...

  2. (三)React基础

    3-1 使用React编写TodoList功能 import { Fragment} from ‘react’ Fragment是占位符 用于替代最外层div元素, 防止生成的元素会有两层div嵌套这 ...

  3. 13. react 基础 redux 的基本介绍 及 用 antd 编写 TodoList 的样式

    1. redux 简述 当 store 内的 数据进行变更的时候  多个组件感知到 store 内的数据变化 将会被自动更新 2. redux 工作流 Store  代表数据存储 (例如: 图书馆管理 ...

  4. 18 react react-redux 的编写 TodoList

    1. 安装 react-redux yarn add react-redux 2. react-redux 编写 TodoList 使所有子组件 都能使用 store #index.js import ...

  5. React Native移动框架功能研究

    React Native移动框架功能研究 此篇只研究React Native框架的功能. 一.React Natvie是什么 React Native是使用React(或者说JS)来开发原生APP的框 ...

  6. HTML&CSS基础-html注释功能

    HTML&CSS基础-html注释功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.什么是HTML(Hypertext Markup Language) 超文本标记 ...

  7. 5. react 基础 - 组件拆分 和 组件传值

    1.将 todoList 进行拆分 创建 编写TodoList.js import React, {Component, Fragment} from 'react';import TodoItem ...

  8. react基础(1)

    在 react入门系列 里面,介绍了一些react的基础知识,在react基础部分,会结合手脚架工具进行更多的总结. 关于webpack我在这里就不讲解了,有需要的小伙伴可以自己去百度一下学习资料,我 ...

  9. 利用React/anu编写一个弹出层

    本文将一步步介绍如何使用React或anu创建 一个弹出层. React时代,代码都是要经过编译的,我们很多时间都耗在babel与webpack上.因此本文也介绍如何玩webpack与babel. 我 ...

随机推荐

  1. Mybatis 向MySql数据库插入带有日期类型字段的数据

    我们的实体类里面一个字段的日期类型是util.Date,在向数据库插入该实体时会报错,说是 日期哪个字段 Data truncation.所以需要做些更改在mybatis的MAPPER映射文件中对插入 ...

  2. linux下安装jdk&&Tomcat环境

    linux系统 Centos6 下部署应用服务 jdk-1.7 环境安装:(切换到root用户下操作)1. 在 /usr/local 目录下创建jdk7文件 mkdir /usr/local/jdk7 ...

  3. 如何创建一个Asp .Net Web Api项目

    1.点击文件=>新建=>项目 2.创建一个Asp .NET Web项目 3.选择Empty,然后选中下面的MVC和Web Api,也可以直接选择Web Api选项,注意将身份验证设置为无身 ...

  4. 137-PHP static修饰的类属性

    <?php class test{ //定义一个类 public static $num=0; //定义static修饰的类属性 public function __construct(){ / ...

  5. 腾讯云服务器上搭建 2.176.3-1.1 版本的Jenkins,jdk 11

    [root@VM_0_12_centos fonts]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@VM_0 ...

  6. Pyinstaller的安装及简单使用

    (1)安装: 用传统的pip install pyinstaller出错,在https://pypi.org/project/PyInstaller/#files上下载PyInstaller-3.4. ...

  7. C# Stream篇(七) -- NetworkStream

    NetworkStream 目录: NetworkStream的作用 简单介绍下TCP/IP 协议和相关层次 简单说明下 TCP和UDP的区别 简单介绍下套接字(Socket)的概念 简单介绍下Tcp ...

  8. docker安装出现"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"

    今天按照这个教程使用WSL安装docker时遇到了个问题: 使用命令:$ docker search mysql 出现:Cannot connect to the Docker daemon at u ...

  9. 部署Ambari Server实战案例

    部署Ambari Server实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备三台虚拟机(需要自行安装jdk环境) 1>.角色分配 NameNode节点: h ...

  10. POJ1338 & POJ2545 & POJ2591 & POJ2247

    POJ1338 2545 2591 2247都是一个类型的题目,所以放到一起来总结 POJ1338:Ugly Numbers Time Limit: 1000MS   Memory Limit: 10 ...