redux 官方示例 todomvc 两个警告修复

用宝塔面板+CentOS 7.6,30分钟搞定DNF手游私服搭建(附全套资源下载) 本文详细介绍了如何使用宝塔面板和CentOS 7.6在30分钟内快速搭建DNF手游私服。通过图形化界面操作,无需复杂命令,即可完成服务端部署、MySQL数据库配置及客户端适配,适合Linux新手快速上手。 阅读详情

题外话:
本人有轻度代码洁癖,只要有警告,我会认为代码还有需要完善的地方,只要有时间我就会着手去解决它,去了解其背后的原因,了解为什么会发出警告,以及解决方案是什么,最终消除这些影响代码质量的“隐患”。
通过解决这类问题,会让自己对相关代码的理解更加深入,做到知其然,并且知其所以然,同时,能够让自己对相关知识点印象深刻。

两个警告相关的 PR

备注:PR 合并之后,最新版已经没有这两个警告了

官方 todomvc 示例源码

其实改动很小,主要看解决思路和理解相关的知识点。

两个大大的红色警告

examples/todomvc/src/components/TodoTextInput.js

完整警告信息如下:

Warning: Received the string `true` for the boolean attribute `autoFocus`. Although this works, 
it will not work as expected if you pass the string "false". Did you mean autoFocus={true}?
    in input (at TodoTextInput.js:40)
    in TodoTextInput (at Header.js:8)
    in header (at Header.js:6)
    in Header (created by Connect(Header))
    in Connect(Header) (at App.js:7)
    in div (at App.js:6)
    in App (at src/index.js:13)
    in Provider (at src/index.js:12)

解决

上面的提示信息,其实已经非常友好了,看重点:Did you mean autoFocus={true}?
看一下报错的地方的源码(TodoTextInput.js:40)

  <input className={
    classnames({
      edit: this.props.editing,
      'new-todo': this.props.newTodo
    })}
    type="text"
    placeholder={this.props.placeholder}
    autoFocus="true"
    value={this.state.text}
    onBlur={this.handleBlur}
    onChange={this.handleChange}
    onKeyDown={this.handleSubmit} />

根据友好的提示信息,将上面的 autoFocus="true" 改为 autoFocus={true} 即可。

examples/todomvc/src/components/MainSection.js

完整警告信息如下:

index.js:1452 Warning: Failed prop type: You provided a `checked` prop to a form field without an `onChange` handler. 
This will render a read-only field. 
If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.
    in input (at MainSection.js:12)
    in span (at MainSection.js:11)
    in section (at MainSection.js:8)
    in MainSection (created by Connect(MainSection))
    in Connect(MainSection) (at App.js:8)
    in div (at App.js:6)
    in App (at src/index.js:13)
    in Provider (at src/index.js:12)

看一下报错的地方的源码(MainSection.js:12)

  <input
    className="toggle-all"
    type="checkbox"
    checked={completedCount === todosCount}
  />

从下面的提示信息看

You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field.

我的理解是:设置了 checked 属性,但是又没有提供 onChange 事件来更新它,那么,将会自动为其设置一个 read-only 属性。
将上面的代码,去掉 className 属性,如下:

  <input
    type="checkbox"
    checked={completedCount === todosCount}
  />

再看界面,这时候,一个可以看到是否选中状态的复选框出现了,它确实是只读的,点击没有反应,当所有待办事项变成完成状态时,该 checkbox 会被设置为选中状态,否则为非选中状态。
再看后面的提示:

If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly` 

我的理解是:如果该 checkbox 是可变的,那么,请为其设置一个默认值,否则,要么设置 onChange 事件,要么设置 readOnly 属性。
设置默认值,例如设置默认选中,可以这样:

  <input
    type="checkbox"
    defaultChecked={true}
  />

如果为其设置默认值 defaultChecked,但不动态设置 checked 属性,是不会有上面的警告的,但我们需要动态为其设置 checked 属性,这样在界面上能看出来是否为全部选中状态(向下的箭头颜色有差别,更详细的,请运行起来查看实际效果)。

很明显,如果要为其设置 checked 属性,设置 defaultChecked 是没有意义的(即使设置了,也还是会报同样的警告)。
所以,从提示信息看上,为了消除这个警告,有两种解决办法:

  1. 设置 readOnly 属性。
      <input
        type="checkbox"
        defaultChecked={completedCount === todosCount}
        readOnly
      />
    
  2. 设置一个 onChange 事件,哪怕是一个什么也不做的“空”事件。
      <input
        type="checkbox"
        defaultChecked={completedCount === todosCount}
        onChange={()=>{}}
      />
    

对于这个例子,设置 readOnly 是最好的方案,本来也是需要只读的嘛。设置“空”事件有点莫名其妙。

解读第二个警告

至于为什么 react 会有这样的检查,stackoverflow.com 网站上有一个网友的回答,我认为是比较贴切的,摘录如下:

Controlled Components

Attributes needed:

  1. value - <input> (not checkbox or radio), <select>, <textbox> or checked for (checkbox or radio).
  2. onChange
  • React handles the condition of the element by updating the value or checked attribute (depending on the element) from the props or the state.
  • We need to notify react when we make a change, like inserting data, or checking the box,
  • so react can update the element’s condition when it rerenders the component.
  • To do so, we must include an onChange handler, in which we will update the state or notify the component’s parent, so it will update the props.
<input
  type="checkbox"
  checked={ this.props.checked }
  onChange={ this.checkboxHandler } 
/>

Uncontrolled Components

Attributes needed:

defaultValue - <input> (not checkbox or radio), <select>, <textbox> or defaultChecked for (checkbox or radio).

React sets the initial value using defaultValue or defaultChecked, and the update of the element’s state is controlled by the user, usually via the DOM using refs.

<input
  type="checkbox"
  defaultChecked={ this.props.checked } 
/>

扩展阅读

是有关可控组件和非可控组件的。

关于作者

在 SAP HANA 与 HANA Cloud 中,用 SQL DDL 创建数据库视图:从设计时工件到运行时对象的全链路实践 本文介绍了在SAP HANA中通过HDI容器使用DDL定义视图的方法。主要内容包括:1)采用.hdbview设计时工件存储视图定义,构建时自动转换为运行时视图,实现版本控制和权限隔离;2)开发前需准备HDI容器、MTA项目及配置.hdiconfig文件;3)详细说明.hdbview语法结构,重点讲解WITH READ ONLY和WITH STRUCTURED PRIVILEGE CHECK的使用场景;4)提供了从创建文件到构建验证的完整流程示例;5)强调跨容器访问时需通过.hdbgrants为#OO用户授予 阅读详情

相关推荐

别再只接个放大器了!压电传感器测量电路(电压/电荷放大器)的5个实战配置要点

本文深入解析压电传感器测量电路中的5个关键实战配置要点,包括电缆长度选择、输入阻抗匹配、过载保护设计、低频噪声抑制及放大器选型策略。特别针对电压放大器和电荷放大器的应用场景差异提供工程实践建议,帮助工程师有效解决信号失真、噪声干扰等常见问题,提升测量精度和系统可靠性。

weixin_26869081的博客 302

Warning: Received `true` for a non-boolean attribute `xxx`

在设置属性的值,使用了三元表达式 <CreateForm isedit={props.isEdit ? true : false} /> 发现报错:Warning: Received `true` for a non-boolean attribute `isedit`. 接收到非布尔属性 原因:React对boolean类型的attribute的识别方式问题 解决方案:可以使用1和0的方式来代替true和false。 githuab:https://github.com/...

Jester的博客 1万+

ldpc编解码器设计与仿真

计算校验节点到变量节点的消息 m_{c \to v}=2 \cdot atanh(\prod_{v’ \in N©\setminus v}tanh(\frac{m_{v’ \to c}}{2}))。计算变量节点到校验节点的消息 m_{v \to c}=L_{v,0}+\sum_{c’ \in M(v)\setminus c}m_{c’ \to v}。◦ 对于每个变量节点 v,计算最终 LLR 值 L_{v,f}=L_{v,0}+\sum_{c \in M(v)}m_{c \to v}。

youngerwang的博客 809

报错You provided a `checked` prop to a form field without an `onChange` handler.

checked值无法改变,需要搭配onChange。将checked改为defaultChecked。

weixin_72280817的博客 1302

PADS VX2.4 缝合孔(阵列过孔)的添加方法

缝合孔的主要目的是:①:增加底层和顶层的地铜皮的连接性,②:起到屏蔽外界信号干扰的作用。铺完铜后,右击空区域选择“选择形状”命令,选取整板中的一块大铜皮,右击选择“覆铜区域内过孔阵列模式”→“沿周边”指令后,再右击选择“覆铜区域内过孔阵列”,便能看到已选区域内添加的缝合孔(过孔阵列),也可以通过铜皮显示或隐藏的无模命令:PO进行查看。完成上面的“防止错误”和“过孔样式”的设置后,开始对整板进行铺铜处理,点击“工具栏”→覆铜平面指示器,在弹出的对话框点击“开始”,便能观察铺铜后的板子。

tianpu2320959696的博客 3055

用R搞定生态溯源:MixSIAR贝叶斯混合模型从安装到出图的保姆级教程

本文提供了一份详细的MixSIAR贝叶斯混合模型教程,涵盖从R环境配置、数据预处理到模型参数设置和可视化分析的完整流程。通过实战案例和常见问题解决方案,帮助生态学研究者快速掌握混合模型在生态溯源中的应用,提升数据分析效率。

weixin_42531516的博客 467

Warning: Received `false` for a non-boolean attribute `xxx`.

React对boolean类型的attribute的识别方式问题,可以采用以下方法解决: xxx={value ? 1 : 0} 改成数字的写法,不用布尔值。 具体可以参考:https://github.com/styled-components/styled-components/issues/1198 转载于:https://www.cnblogs.com/mengf...

weixin_30240349的博客 2533

学Simulink——四开关 Buck‑Boost(FSBB)变换器的无缝模式切换仿真

本文详细介绍了使用Simulink实现四开关Buck-Boost(FSBB)变换器无缝模式切换的仿真方法。FSBB变换器因其输入输出同极性、单电感和双向能量流特性,广泛应用于光伏储能、USB-PD和车载电源等场景。文章重点解决了模式切换中的直通风险和占空比跳变问题,通过统一电压PI控制、Stateflow模式仲裁和200ns死区设计,实现了Buck(26V→24V)、Pass-Through(24V±1V)和Boost(22V)三种工作模式的无缝过渡。仿真结果显示输出电压稳定在12V±0.15V,切换过程无

amy_mhd的博客 66

React:Failed prop type: You provided a `value` prop to a form field without an `onChange` handler. T

错误截图: 原因: 原因是因为input标签,没有定义onChange 但是提供了value属性。React会抛出警告,并将元素设置为只读。 如果目标是只读字段,最好使用readOnly属性明确加以定义。这不仅会消除警告,也会确保代码的可读性。 解决: 可以添加readOnly={true} ,或者直接添加readOnly属性,而不设置值,React会默认将该属性的值设为true。 ...

qq_40555976的博客 6257

华为OD新系统机试真题 - 端口流量统计

华为OD机试新系统真题【端口流量统计】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统4月26号机试真题【端口流量统计】。

qq_45776114的博客 762

华为OD干了两个月,还是跑了

​本人工作了快13年,base南京。2024年2月份由于公司业务变动第一次拿到了公司发的大礼包,同时也面临着失业的问题,我对自己的技术还是很有信心的,但是,找了大概有一个多月时间,发现心意的工作的确不太好找,当然收到挺多家offer,就是薪资不太满意,外包也一直不想去,不过说实话外包给的薪资普遍要比自研的单位要高一些,最后为了钱还是进华为(既然选择外包那就选择好一些的吧),毕竟中年老男人工作不能断太久。

啊渊的专栏 1万+

You provided a `value` prop to a form field without an `onChange` handler. This will render a read-

React 报错如下: Warning: You provided a value prop to a form field without an onChange handler. This will render a read-only field. If the field should be mutable use defaultValue. Otherwise, set either onChange or readOnly. 原因: input标签没有定义onChange事件,但提供了val

weixin_48321253的博客 4190

Agent驱动电商运营:从选品到售后的全链路革新

在当今竞争激烈的电商市场中,传统的电商运营模式面临着诸多挑战。从选品到售后,每个环节都需要大量的人力投入和专业知识。选品需要深入了解市场趋势和消费者需求,营销需要精准定位目标用户,客服需要24小时响应用户咨询。这些工作不仅耗时耗力,而且容易受到人为因素的影响,导致效率低下和成本高企。AI Agent是一种能够感知环境、做出决策并采取行动的智能系统。感知能力:能够获取和处理环境信息。决策能力:能够根据感知到的信息做出决策。行动能力:能够执行决策,对环境产生影响。学习能力。

AI 领航者的博客 354

代码报错 : - Warning: You provided a `value` prop to a form field without an `onChange` handler. This

报错截图: 翻译: 报错原因: 在 input 标签里,没有定义 onChange 事件, 但是提供了 value 属性, 这时React会抛出警告,并将元素设置为只读; 如果目标是只读字段,最好使用readOnly属性明确加以定义。这不仅会消除警告,也会确保代码的只读性; 解决方案一: 可以添加readOnly={true} ,或者直接添加readOnly属性,而不设置值,React会默认将该属性的值设为true; 解决方案二:...

sherly_chen的博客 3190

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

react实现表单数据的更改

在react中 如果给input标签加了value属性就会报下面这个错误 You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`. 意思是:...

IAMAFLYFISH的博客 2893

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

接收到非布尔属性 Warning: Received `false` for a non-boolean attribute `xxx`

问题描述 控制台报错 接收到非布尔属性 Warning: Received 'false' for a non-boolean attribute 'xxx' 报错代码定位 解决过程 搜索Warning: Received 'false' for a non-boolean attribute,查看github上的解决方案 github上的解决方案-Warning: Received ‘tru...

天心天地生的博客 1万+

reactjs 警告解决

1、Warning: getDefaultProps was defined on GraphComponent, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps ins...

jinglier520的专栏 5473

boolean attribute及其规范取值

intro 布尔属性,常见于表单的控件。 有checked, selected, required, disabled, enabled等等。 规范取值 不出现在元素的开始标签。视为false。 <option> 出现在元素的开始标签。出现皆视为true。 取值为属性的名称字符串。 <option selected="selected"> 最小化形式(属性名单独出现即可...

wuyujin1997的博客 1658

React报错 You provided a `value` prop to a form field without...

报错内容 Failed prop type: You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use ...

weixin_34347651的博客 3223

react.js Warning: Failed form propType: You provided a value prop to a form field without an onChang...

错误信息: eact.js:20483 Warning: Failed form propType: You provided avalueprop to a form field without anonChangehandler. This will render a read-only field. If the field should be mutable used...

weixin_30340353的博客 1116

React学习记录

不会前端的java工程师不是好java工程师 在我的私人博客查看本篇博文 前言 俗话说的好,不会前端的java工程师不是好java工程师。笔者在之前已经学习过Vue的相关技术栈,事实上笔者的毕业设计也是用Vue做的~除了Vue,React和Flutter如今也是如日中天般的火爆,今天这篇文章记录一下学React的过程。后续应该随着学习的深入还会不断更新,所以这里排个update log,方便记...

马赛琦的博客 447

react包版本过高,使 PropType属性过时的解决办法。

一、报错如下:undefined is not an object(evaluating '_react2.PropTypes.oneOfType')二、解决方法:1. 删除react包。 2.下载低版本的react包。npm uninstall react --savenpm install react@15.4.0 --save查看 package.json文件...

qq_38719039的博客 2366

React中input checked的使用

用React写一个小组件的时候遇到了一个问题,记录下来,暂时的html代码如下 <div className="switch"> <input type="radio" name="switch" id="on" checked/> <label htmlFor="on">on</label> ...

weixin_30905981的博客 2356

解决前端开发出现[Vue warn]: Invalid prop: type check failed for prop "data". Expected.....问题

作为一个刚学前端两周的小白,在开发过程中出现了好多低级错误,以此记录: 1.当出现[Vue warn]: Invalid prop: type check failed for prop "data". Expected Array, got String with value ""时,是因为返回的是一个数组,而我们绑定的变量是字符类型,修改变量类型即可: 如下图 2.当出现[Vu...

qq_40781782的博客 5万+
上一篇: redux 官方示例 todomvc 中的 todoList 过滤事件解析
下一篇: react 技术栈(全家桶)学习
uncleAndyChen
博客等级 码龄22年 32粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值