- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设已经定义了所有不同的组件。
在我的 React 组件中,我希望单击按钮触发附加一个新的 TextBox
我动态创建的组件 questions
成分。当我用 forceUpdate()
测试按钮点击时, 一个 TextBox
已成功附加到 questions
但没有明显添加新的 TextBox
元素。我使用 <h4>Random number : {Math.random()}</h4>
测试了组件是否真的重新渲染了事实证明组件正在这样做,因为每次我按下按钮时数字都会改变。
有什么地方做错了吗?
constructor (props) {
super(props);
this.questions = [];
this.questions.push(<TextBox key={this.questions.length}/>);
this.createTextBox = this.createTextBox.bind(this);
this.loadTextBox = this.loadTextBox.bind(this);
}
createTextBox() {
this.questions.push(<TextBox key={this.questions.length}/>);
this.forceUpdate();
}
loadTextBox() {
return (this.questions);
}
render() {
return(
<div>
<h4>Random number : {Math.random()}</h4>
{this.loadTextBox()}
<ButtonToolbar className="add-question">
<DropdownButton bsSize="large" title="Add" id="dropdown-size-large" dropup pullRight>
<MenuItem eventKey="1" onClick={this.createTextBox}>Text Box</MenuItem>
</DropdownButton>
</ButtonToolbar>
</div>
);
}
最佳答案
只有 this.state
中的项目才会被 React 正确监控是否应该发生重新渲染。使用 this.forceUpdate
不会检查 this.questions
是否已更改。
使用 this.questions
作为 this.state.questions
。当你这样做时,不要改变 this.state.questions
。相反,制作一个新副本并在其上使用 this.setState
。
constructor (props) {
super(props);
this.state = {
questions: [<TextBox key={0}/>]
}
this.createTextBox = this.createTextBox.bind(this);
this.loadTextBox = this.loadTextBox.bind(this);
}
createTextBox() {
const newQuestions = [...this.state.questions, <TextBox key={this.questions.length}/>]
// or you can use
// const newQuestions = this.state.questions.concat(<TextBox key={this.questions.length + 1}/>)
this.setState({questions: newQuestions})
}
loadTextBox() {
return (this.state.questions);
}
需要注意的一件重要事情是几乎从不需要 this.forceUpdate
。如果您发现自己在使用它,那么您正在以一种非最佳方式编写代码。我对您的代码进行了一些关于如何分配键的修改。您应该检查更新的唯一原因是 this.state
中的某些内容是否已更改,这涉及使用 this.setState
。
关于reactjs - this.forceUpdate() 不重新渲染动态创建的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50312648/
假设已经定义了所有不同的组件。 在我的 React 组件中,我希望单击按钮触发附加一个新的 TextBox我动态创建的组件 questions成分。当我用 forceUpdate() 测试按钮点击时,
文档对 forceUpdate 的描述如下: Calling forceUpdate() will cause render() to be called on the component, skip
我有以下组件,其中将显示产品列表。 CounterComponent 添加到两个位置,一个在 ProductCatalog 中,另一个在 ProductCard 中,可以在模态中显示。在柜台表示订购的
以非常简单的react.js应用程序为例I created here .. data = note: "" setNote = -> data.note = $('inpu
在 React docs , forceUpdate有一个参数callback . 是不是像 setState设置状态后调用的第二个参数?或者那是为了什么? 我找不到任何关于它的文章。 最佳答案 Is
我可以强制重装对于具有 this.forceUpdate() 的父组件,但是如何为子组件做呢? 即以下 react 类方法: buttonClick = () => { //This updat
我的组件状态保存的数据(片段)看起来像这样: [ { batchId: 1234, ... jobRowData: [
我在整个应用程序的多个组件中使用以下模式。我注意到许多人不鼓励使用 forceUpdate(),有些人甚至称其为 hack。那么如何在不使用它的情况下完成呢? // user.js export de
迫使 Vue 实例重新渲染。注意它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。 比如v-for里面数据层次太多, 修改过数据变了,页面没有重新渲染,需手动强制刷新。
我在控制台中看到这个错误并尝试了很多解决方案都没有用 ExceptionsManager.js:84 Warning: Can't call setState (or forceUpdate) on
我想在用户单击主页按钮时刷新整个页面。我正在使用 thisHOME 它按预期工作,但我有这个错误。知道我为什么得到它吗? Cannot read property 'enqueueForceUpdat
我有一个问题,redux 状态被成功更新,但 react 组件没有重新渲染,经过一些研究我相信 [forceUpdate()][1] 可以解决我的问题,但我是不确定实现它的正确方法,即在 redux
我有这个组件,我想在我的 api 调用后重新呈现。我无法弄清楚为什么在 getWinks 的 api 调用之后,winks-count 确实更新但不在 View 上,除非我刷新。我不应该使用 this
我这周开始学习 VueJS,我正在尝试构建一个笔记应用程序,但遇到了一些问题: NOTES :
我有一个简单的 React 设置,看起来有点像这样: index.js ReactDOM.render(, document.getElementById('root')); App.js expor
Gutentag,伙计们! 卸载组件后,我的应用程序不断收到此错误消息: Warning: Can't call setState (or forceUpdate) on an unmounted c
React 文档说 永远不要直接改变 this.state,因为之后调用 setState() 可能会替换你所做的改变。将 this.state 视为不可变的... 但当我根本不使用 setState
我不确定我这样做是对还是错,但我似乎找到了如何为计算值更新 dom 的所有答案...... 我有这个组件: Vue.component('bpmn-groups', { props: ['gr
当 observable 更新时,Mobx @observer 组件会触发该组件上的 render 或 forceUpdate 吗?当它发生时会触发哪些生命周期方法? render 和 forceUp
我正在 componentDidMount 中获取数据并更新状态,并且出现了著名的警告: Warning: Can't call setState (or forceUpdate) on an unm
我是一名优秀的程序员,十分优秀!