OPTION标记内容中静态文本加状态值的不变冲突
Invariant Violation with static text plus state value in OPTION tag content
有人能告诉我为什么当我在SELECT标记中呈现此状态更改时,它会在React中产生错误吗。我得到一个不变违规错误。我没有看到浏览器对DOM进行任何错误提示的更改。我最终使用了dangerouslySetInnerHTML方法来实现这一点。感谢您的意见。
以下是当状态值更改时引发错误的代码:
<select>
<option value="0" defaultValue>Add a {this.state.filtertype}</option>
</select>
此代码运行良好:
<select>
<option value="0" defaultValue>{this.state.filtertype}</option>
</select>
将已评估的状态值作为内部html内容的静态文本在其他元素中是否正常工作?这是React错误吗?
这不是React错误,它只是对html <option>
标记的更多限制。
因此,React更新DOM的方式是,它本质上将所有浮动文本节点转换为具有特定reactid的<span>
标记,并且当状态/道具发生更改时,它可以很容易地找到这些项,以便在需要时进行协调和更新。
这里的问题是<option>
标签不能包含任何其他标签。这是无效的HTML,它就是不起作用。因此,问题是您想要创建这样一个虚拟DOM结构:
<select>
<option>
<span>Add a</span>
<span>filterType</span> <!-- React only wants to change this on update -->
</option>
</select>
当状态更新时,React只想简单地查找只包含状态的span id并更新它。但是,你的浏览器会创建这样的东西:
<select>
<option>Add a filterType</option>
</select>
当React进行更新时,它会查看<option>
,并想知道<span>
去了哪里(因为它只想更改filterState)。相反,它一无所获,并抛出一个错误。
如何解决?最简单的方法就是在你的render
:中,在你的状态前面加一个"Adda"
<select>
<option value="0" defaultValue>{"Add a " + this.state.filterType}</option>
</select>
相关文章:
- 事件和状态
- 获取选择框的状态
- 相位器状态未捕获参考错误
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何使用密码检测网络中的状态连接
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 在Angular 2中布线期间保持零部件处于活动状态
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- XMLHttpRequest未返回值-状态202
- Javascript-ID冲突的几率
- 使用javascript反复检查用户在facebook上的登录状态
- 如何使bxslider仅在移动视图中处于活动状态
- 获取ASP.NET Ajax Timer状态
- React redux初始化功能,无论状态变化如何
- 无法在现有状态转换期间更新-未使用任何非法的setState()
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 从组件状态的数组中删除元素
- iOS 7+ 向后滑动手势与状态更改动画冲突
- Ajax请求不返回所有JSON -加载资源失败:服务器响应状态为409(冲突)