首页 > 其他分享 >React学习笔记19-受控组件

React学习笔记19-受控组件

时间:2023-11-04 11:33:29浏览次数:37  
标签:受控 index 19 newlist list React state 组件

1.受控组件的定义

React组件的数据渲染是否被调用者传递的 props 完全控制,完全控制则为受控组件,否则非受控组件。即React 的 state 成为组件的唯一数据源。   下面用一个小案例来演示,案例中todolist组件的唯一数据源就是State,todolist组件就是一个受控组件
import React, { Component } from 'react'
import "../01-base/css/01-index.css"
export default class App extends Component {
    constructor() {
        super()
        this.state = {
            list: [],
            todotext: ''

        }
    }
    render() {
        return (
            <div>
                <input type="text" value={this.state.todotext} onChange={
                    (e) => {
                        this.setState({
                            todotext: e.target.value
                        })
                    }
                } />
                <button onClick={
                    () => {
                        const newlist = [...this.state.list]
                        newlist.push({ todotext: this.state.todotext, check: false })
                        this.setState({
                            list: newlist,
                            todotext: ''
                        })

                    }
                }>add</button>
                <ul>
                    {this.state.list.map((item, index) => {
                        return <li key={index}>
                            <input type="checkbox" checked={item.check} onChange={
                                () => {
                                    this.handlerCheck(index)
                                }
                            } />
                            <span style={
                                { textDecoration: item.check && "line-through" }
                            }>
                                {item.todotext}
                            </span>

                            {item.check && <span>完成</span>}
                            <button onClick={
                                (e) => {
                                    console.log(e)
                                    const newlist = this.state.list
                                    newlist.splice(index, 1)
                                    this.setState({
                                        list: newlist
                                    })
                                }
                            }>删除</button></li>
                    })}
                </ul>
                <div className={this.state.list.length ? 'hidden' : ""}>暂无代办事项</div>
            </div>
        )
    }
    handlerCheck(index) {
        let newlist = [...this.state.list]
        newlist[index].check = !newlist[index].check
        this.setState({
            list: newlist
        })
    }
}

2.受控组件的优势

受控组件的数据源只有一个有利于复杂组件的维护。

3.受控组件的劣势

对于受控组件来说,输入的值始终由 React 的 state 驱动。你也可以将 value 传递给其他 UI 元素,或者通过其他 事件处理函数重置,但这意味着你需要编写更多的代码。  

标签:受控,index,19,newlist,list,React,state,组件
From: https://www.cnblogs.com/SadicZhou/p/17809099.html

相关文章

  • [NOIP1998 普及组] 阶乘之和
    [NOIP1998普及组]阶乘之和题目描述用高精度计算出()。其中!表示阶乘,定义为。例如,。输入格式一个正整数。输出格式一个正整数,表示计算结果。样例#1样例输入#13样例输出#19提示【数据范围】对于的数据,。【其他说明】注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围......
  • #yyds干货盘点#Expo 搭建 React-native 项目
    Expo搭建RN项目Expo 搭建项目有两种方式:一种是通过Expo的脚手架 expo-cli;一种是通过 create-react-native-app。本文采用第一种。1、安装expo-clinpminstallexpo-cli--global2、创建项目expoinitmy-new-project会有两类模板让你选择:托管工作流,裸露工作流(感觉叫原生工......
  • Windows Server2019安装MySQL8.0.32
    安装包下载:https://downloads.mysql.com/archives/community/下载mysql-8.0.32-winx64.zip1、制定目录配置basedir=D:\\mysql8.0.32#mysql数据存放目录datadir=D:\\mysql8.0.32\\data将.zip压缩包解压到D盘,并重命名为mysql8.0.322、编辑my.ini文件[client]#max_a......
  • 面试必刷TOP101:19、寻找峰值
    题目题解如输入[2,4,1,2,7,8,4]时,会形成两个山峰,一个是索引为1,峰值为4的山峰,另一个是索引为5,峰值为8的山峰,如下图所示:importjava.util.*;publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@......
  • MAX7219点阵屏四合一—基于CH32V307的应用
    参考链接:https://blog.csdn.net/weixin_46957846/article/details/127352759本篇文章为基于CH32V307的MAX7219级联应用,代码是基于上参考链接代码基础上修改,若有侵权请联系及时删除。该应用测试所用模块为一个四级级联模块,参考链接代码下载应用4个点阵模块均显示均显示同一个字符......
  • React学习笔记16-属性props
    1.属性的定义props是正常是外部传入的,组件内部也可以通过一些方式来初始化的设置,属性不能被组件自己更改,但是你可以通过父组件主动重新渲染的方式来传入新的props。这就是React中的单向数据流2.属性的特点属性是描述性质、特点的,组件自己不能随意更改,必须由父组件进行更改......
  • React学习笔记17-属性VS状态
    相似点:都是纯js对象,都会触发render更新,都具有确定性(状态/属性相同,结果相同)不同点:1.属性能从父组件获取,状态不能2.属性可以由父组件修改,状态不能3.属性能在内部设置默认值,状态也可以,设置方式不一样4.属性不在组件内部修改,状态要在组件内部修改5.属性能设置子组件初始值......
  • QCN9074 QCN9024|DR9074E Compatible with DR4019 Platform OpenWrt
    ExcitingNews:WallysWiFi6Card#DR9074ENowCompatiblewithDR4019Platform(WiFi5)andOpenWrtDriver-AGame-ChangerinWirelessTech!Wearethrilledtobringyousomeexcitingnews!OurWallysWiFi6DualBandCard#DR9074Ehasjusttakenagiant......
  • React 中复制静态文件到 build的文件夹中
    React中复制静态文件到build的文件夹中环境:umi 框架前提:在跟目录下放置了Dockerfile 文件,在build时需要自动复制到dist文件夹里面。 1. 安装 copy-webpack-plugin 插件 2. .umirc.ts 文件中使用copy命令import{defineConfig}from"umi";exportdefaultde......
  • React 中设置环境变量(开发环境、测试环境和生产环境)
    React中设置环境变量(开发环境、测试环境和生产环境)环境React,Umi框架 1. 安装插件:cross-envnpmicross-env-S  2. 修改 package.json 文件"scripts":{"dev":"cross-envREACT_APP_ENV=devumidev","dev:prod":"cross-envREACT......