React入门 - 06(TodoList 列表数据的新增和删除)

这篇具有很好参考价值的文章主要介绍了React入门 - 06(TodoList 列表数据的新增和删除)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章内容

上一节内容我们完成了输入框中可以自由输入内容,这一节我们继续 TodoList功能的完善:列表数据的新增和删除。

在开始之前,我们先介绍一下 React 如何渲染数组数据到界面上。打开官网,在这里明确告诉我们列表的渲染可以使用数组的 map或者 filter方法
React入门 - 06(TodoList 列表数据的新增和删除),react.js,javascript,前端

一、实践一下 React 的列表渲染

1、首先打开 TodoList.js文件, state 状态中初始化一个 list数组,用于放置列表数据,我们可以里面填充一些数据,使用 React的列表渲染来渲染这些数据到页面。

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

class TodoList extends Component{
  constructor(props) {
    super(props) // ES6 的语法

    this.state = {
      inputValue: '', 
      list: ['React 入门-01', 'React 入门-02', 'React 入门-03'] // 1、定义一个list ,用于放置列表数据
    }
  }



  render() {
    return (
      <Fragment>
        <div>
          <input value={this.state.inputValue} onChange={this.changeInputValue.bind(this)} />
          <button> 提交 </button>
        </div>

        {/* 2、使用map 方法进行渲染数据 */}
        <ul>
          {this.state.list.map((item, index) => {
            return (<li> {item} </li>)
          })}
        </ul>
      </Fragment>
    )
  }

  changeInputValue(e) {
    console.log(e.target.value)
    this.setState({
      inputValue: e.target.value
    })
  }
}

export default TodoList

2、运行项目,打开浏览器观察页面,可以看到数据已经成功渲染
React入门 - 06(TodoList 列表数据的新增和删除),react.js,javascript,前端

二、TodoList 新增功能

上面我们已经知道怎么去渲染一个数组列表了。接下来我们继续完善 TodoList功能:输入框输入内容后,点击提交,数据添加至列表

1、首先我们给 ”提交“ 按钮绑定点击事件,定义事件方法为 addListData
2、addListData方法里将 inputValue数据推到 list数组中,同时清空 inputValue的数据,让输入框清空。注意的是,在 React中数据的更新需要使用 setState方法
3、然后通过 map方法 将数据渲染到界面里
4、运行界面,发现新增功能已经实现。

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

class TodoList extends Component{
  constructor(props) {
    super(props) // ES6 的语法

    this.state = {
      inputValue: '', 
      list: [] // 1、定义一个list 的空数组
    }
  }



  render() {
    return (
      <Fragment>
        <div>
          <input value={this.state.inputValue} onChange={this.changeInputValue.bind(this)} />
          {/* 2、按钮绑定点击事件 */}
          <button onClick={this.addListData.bind(this)}> 提交 </button>
        </div>

        {/* 3、使用map 方法进行渲染数据 */}
        <ul>
          {this.state.list.map((item, index) => {
            return (<li> {item} </li>)
          })}
        </ul>
      </Fragment>
    )
  }

  // 4、按钮点击事件中,将 inputValue 的值推到 list 数组中。
  addListData() {
    // 5、注意数据的更新还是使用 React 的 setState 方法
    this.setState({
      list: [...this.state.list, this.state.inputValue]
    })

    this.setState({
      inputValue: ''
    })
  }

  changeInputValue(e) {
    console.log(e.target.value)
    this.setState({
      inputValue: e.target.value
    })
  }
}

export default TodoList

三、列表循环的 key

  • 上面我们似乎已经将功能完美实现了,可是打开控制台,你会发现如下图的错误警告。它提示我们: 在 React中,进行列表的循环渲染时,需要给渲染的每一项添加一个 key作为其唯一标识。

  • 我们根据提示修改一下代码,给列表的每一项都增加一个key,再运行就会发现错误警告已经消失了

  • 至于为什么需要添加 key以及这个 key的作用是什么,我们后面的章节中会进行介绍,现在请忽略它
    React入门 - 06(TodoList 列表数据的新增和删除),react.js,javascript,前端

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

class TodoList extends Component{
  constructor(props) {
    super(props) // ES6 的语法

    this.state = {
      inputValue: '', 
      list: [] // 1、定义一个list 的空数组
    }
  }



  render() {
    return (
      <Fragment>
        <div>
          <input value={this.state.inputValue} onChange={this.changeInputValue.bind(this)} />
          {/* 2、按钮绑定点击事件 */}
          <button onClick={this.addListData.bind(this)}> 提交 </button>
        </div>

        {/* 3、使用map 方法进行渲染数据 */}
        <ul>
          {this.state.list.map((item, index) => {
      	{/* 4、使用map 方法进行渲染数据 */}
            return (<li key={index}> {item} </li>)
          })}
        </ul>
      </Fragment>
    )
  }

  // 4、按钮点击事件中,将 inputValue 的值推到 list 数组中。
  addListData() {
    // 5、注意数据的更新还是使用 React 的 setState 方法
    this.setState({
      list: [...this.state.list, this.state.inputValue]
    })

    this.setState({
      inputValue: ''
    })
  }

  changeInputValue(e) {
    console.log(e.target.value)
    this.setState({
      inputValue: e.target.value
    })
  }
}

export default TodoList

四、删除

上面我们完成了 TodoList的新增功能。现在我们进行删除功能:点击列表的每一项,数据进行删除

1、首先我们给列表的每一项绑定一个点击事件, 事件方法为 deleteData,将循环的 index 传递给 deleteData方法

2、在 deleteData方法中,删除 list数组中的对应数据.注意在删除之前,需要对数据 list数据进行拷贝,否则会破坏原数组数据,出现数据错乱的现象

3、运行界面,进行操作,可以发现功能已经完美实现。

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

class TodoList extends Component{
  constructor(props) {
    super(props) // ES6 的语法

    this.state = {
      inputValue: '', 
      list: [] // 1、定义一个list 的空数组
    }
  }

  render() {
    return (
      <Fragment>
        <div>
          <input value={this.state.inputValue} onChange={this.changeInputValue.bind(this)} />
          
          <button onClick={this.addListData.bind(this)}> 提交 </button>
        </div>

        <ul>
          {this.state.list.map((item, index) => {
            // 2、给 li 元素绑定点击事件
            return (<li key={index} onClick={(this.deleteData.bind(this,index))}> {item} </li>)
          })}
        </ul>
      </Fragment>
    )
  }

  // 3、列表项的点击事件, 接收循环下标 index
  deleteData(index) {
    // 4、先拷贝一份 list 数据.注意如果直接修改 state 里 list 数据,会出现数据错乱问题
    const list = [...this.state.list]
    // 5、使用 splice 把数据剔除出去
    list.splice(index, 1)
    // 6、使用 setState 方法更新数据
    this.setState({
      list: list
    })

  }

  addListData() {
   
    this.setState({
      list: [...this.state.list, this.state.inputValue]
    })

    this.setState({
      inputValue: ''
    })
  }

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

export default TodoList

到此,本章内容结束!文章来源地址https://www.toymoban.com/news/detail-822296.html

到了这里,关于React入门 - 06(TodoList 列表数据的新增和删除)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 丁鹿学堂:前端学习进阶指南之react入门(react在html中使用数据绑定和修改)

    在html中使用react 今天跟大家分享react的基础语法。 我们采用最简单的方法,就是在html中引入react 因为一上来就使用脚手架的话,很多配置大家不一定清楚。 而在html中使用react的话,可以直接去学习react最基本的语法。 这是零基础学习react的最佳实践。 引入react的依赖 react也

    2024年02月14日
    浏览(51)
  • react18虚拟滚动列表

    不依赖第三方,借用react18api和原生JS实现一个虚拟滚动列表,如果你的项目比较小,又不想引入第三方的框架,可以拿去用; style样式 核心HTML 逻辑代码

    2024年02月19日
    浏览(27)
  • react--自定义列表字段

    支持react表格自由选择展示的字段,支持全选 1、组件代码如下  2、组件使用  页面导入 import CustomColumns from \\\"@/components/CustomColumns\\\"; 设置默认状态:  3、定义tableColumns 4、在table组件中过滤出操作选项和默认项 5、组件调用

    2024年02月03日
    浏览(24)
  • React【React是什么?、创建项目 、React组件化、 JSX语法、条件渲染、列表渲染、事件处理】(一)

           React是什么? 为什么要学习React  React开发前准备  创建React项目 

    2024年02月11日
    浏览(45)
  • react渲染列表信息(简单易学)

    1.新建个文件夹,启动终端,使用 create-react-app my-react 命令创建项目,其中my-react是自定义项目名称。 2.删除根目录src文件夹下多余文件,保留index.js和index.css文件 3.安装scss需要的依赖,使用npm install --save node-sass,npm install --save sass-loader命令进行安装并在根文件夹处引入 4.引

    2024年04月10日
    浏览(23)
  • React Native 任务列表实战

    通过 ToDo 的小项目实战,我们可以回顾页面布局,事件的监听,React Native 中的钩子函数使用。 首先我们先完成项目的整体框架搭建,把页面中相关的元素和样式类名定义好。并且表明对应单独组建的位置,具体的实例如下: 任务列表的头部组建只是展示标题,所以在编写代

    2024年02月12日
    浏览(29)
  • Axure rp9 利用中继器实现列表新增行、删除行的效果

    中继器(英文名Repeater)是目前为止Axure最复杂的功能(没有之一),学习它的使用有助于我们快速设计一些复杂的交互界面。本文通过Axure rp9 利用中继器实现列表新增行、删除行的案例,介绍如何利用中继器实现以下效果: 1、利用中继器实现列表的隔行变色。 2、实现列表

    2024年02月12日
    浏览(31)
  • 【前端知识】React 基础巩固(十三)——列表渲染

    在 React 中没有像 Vue 模块语法中的 v-for 指令,而是需要我们通过 JS 代码的方式组织数据,转成 JSX 在 React 中,展示列表最多的方式就是使用数组的 map 高阶函数 在展示数组前,有时会进行一些处理 过滤一些内容(filter 函数) 截取数组中的一部分内容(slice 函数) 列表中的

    2024年02月10日
    浏览(41)
  • react go实现用户历史登录列表页面

    refer: http://ip-api.com/ 1.首先需要创建一个保存用户历史的登录的表,然后连接go 2.在用户登录的时候,获取用户的IP IP位置,在后端直接处理数据即可(不需要在前端传递数据) (1)增加路由: (2)在model里增加(例如:models/history_login_logs.go)     (3) 在登录后的方法中增加

    2024年02月12日
    浏览(28)
  • 【实战】 React 与 Hook 应用:实现项目列表 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二)

    学习内容来源:React + React Hook + TS 最佳实践-慕课网 相对原教程,我在学习开始时(2023.03)采用的是当前最新版本: 项 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包