尽管试图避免所有记录在案的陷阱,阻止React在状态更改后重新渲染,但我仍然无法解决我的问题:
// Grid.js, render a grid of random-colored boxes
constructor(props){
super(props);
this.initialcolors = this.initialcolors.bind(this);
this.updatecolors = this.updatecolors.bind(this);
this.state = {colors: this.initialcolors()}
}
// ...
updatecolors(index){
let currentColors = [...this.state.colors];
let currentColor = currentColors[index];
let newColors = this.props.colors.filter(c => c !== currentColor)
let newColor = newColors[Math.floor(Math.random() * newColors.length)];
currentColors[index]=newColor;
this.setState(st => ({colors: currentColors}))
}
render(){
return(<div>
{this.state.colors.map( (color, index) =>
<Box key={index} position={index} color={color} updatefunc={this.updatecolors} className="Box.css"/>
)}
</div>)
}
// Box.js, the colored box, onClick triggers state-change by calling updatefunc from parent
constructor(props){
super(props);
this.state = {color: this.props.color};
this.changeColor = this.changeColor.bind(this);
}
changeColor(evt){
this.props.updatefunc(this.props.position);
}
render(){
return(
<div style={{backgroundColor: this.state.color,
height: 100,
width: 100,
padding: 0.5}}
onClick={this.changeColor}> </div>
)
}
}
从每个长方体组件调用update函数,并触发长方体网格上新颜色的指定。
试图避免常见的错误:
但是,尽管onClick成功触发了状态更改,但不会进行重新渲染。我在这里缺少的另一个方面是什么?
非常感谢!
Box.js使用this.state.color
作为背景颜色,它永远不会改变,因为每个框只调用一次构造函数。您可能想要使用this.props.color
,其颜色已从Grid更改。
class Box extends Component {
constructor () {
super();
this.changeColor = this.changeColor.bind(this);
}
changeColor (evt) {
this.props.updatefunc(this.props.position);
}
render () {
return (
<div
style={{
backgroundColor: this.props.color,
height: 100,
width: 100,
padding: 0.5
}}
onClick={this.changeColor}
/>
)
}
}
我在一个应用程序的前端原型上工作,该应用程序具有给定的JS、React和CoreUI4 React技术栈。我来自Python背景,在网络开发和我给定的技术堆栈方面没有太多经验。当我不得不开始使用钩子时,这一点变得很明显。 问题 我真的不明白为什么它不更新我的和/或不渲染。我需要一个条件渲染,我也使用。 我试图: 从我的主应用程序中传递一个更大的状态,一旦我启动条件逻辑(挂钩规则)就无法工作。 当我
我已经初始化了一个数组状态,当我更新它时,我的组件不会重新渲染。以下是一个最低限度的概念证明: 根据这段代码,似乎输入应该包含要开始的数字0,并且无论何时更改,状态也应该更改。在输入中输入“02”后,应用程序组件不会重新渲染。但是,如果我在5秒后执行的onChange函数中添加setTimeout,则表明数字确实已更新。 对为什么组件不更新有什么想法吗? 这是一个带有概念证明的代码沙盒。
我试图在if语句中设置状态,但它不会这样做。结果,我需要从if语句中更新状态,在那个里我可以接收经度和纬度坐标,但它不会保存状态。若我在If语句之外的控制台中回显,我将只读取第一个setState值表单componentWillMount。有什么问题吗?我做错了什么?结构如下:
问题内容: Parent(在我的示例中)组件通过Child()组件呈现一个数组。父级决定更改数组中的属性,React触发子级重新渲染的方式是什么? 调整数据后,我想出的只是在Parent中。这是触发更新的hack还是React方法? JS小提琴:https: //jsfiddle.net/69z2wepo/7601/ 问题答案: 这里的问题是您要在中存储状态,而不是。由于此组件是mutating
问题内容: 我一直在尝试了解新的React Context API并正在使用它。我只是想检查一个简单的案例-更新提供者的数据时,所有这些都会重新呈现。 在Codesandbox上 查看 这个小例子 因此,在我的示例中,我有一个组件-其状态如下所示- 我创建了一个新的从这里包含语境做出反应,并从国家和值传递给两位消费者和。 所以我的假设是,如果随机数更新,它将更改上下文,并且两个组件都应触发重新渲染
问题内容: 我记得当我发现它是异步的时,我感到非常惊讶。现在,我偶然发现了一种“怪异”的行为,这种行为不符合我对异步性的理解。 考虑下面的代码片段(由于某种原因导致,这是外部沙箱:https : //codesandbox.io/s/zwrvkz74y3): 如果运行此程序并检查控制台,您将看到该调用被两次调用,但是不应该仅一次累积和更新Component吗? 更新 :我认为我的困惑来自React