- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我目前正在学习 react.js,我遇到了一个我无法解决的问题。
总的来说,我有一个用于渲染图像网格的容器。如果您选择其中一张图片,您将能够从选项列表中将其更改为另一张图片。
这是目前渲染良好的 Grid 容器的潜在相关部分。如果上下文中的完整代码有帮助,您可以在这里找到它:https://codepen.io/KrisSM/pen/wvvmoqg
_onBrigadePosSelection = slot => {
console.log("This was the division selected in Brigade Grid: " + slot);
this.props.onBrigadePosSelected(slot);
};
render() {
for (let i = 0; i < 15; i++) {
//each block is a separated so that they can be rendered as different rows in the return
if (i <= 4) {
rowOne.push(
<div key={i}>
<ImageButton
btnType={"Grid"}
imageSrc={this.props.icons[this.props.brigadeDesign[i]]}
clicked={() => this._onBrigadePosSelection(i)}
/>
</div>
);
}
if (i > 4 && i <= 9) {
rowTwo.push(
<div key={i}>
<ImageButton
btnType={"Grid"}
imageSrc={this.props.icons[this.props.brigadeDesign[i]]}
clicked={() => this._onBrigadePosSelection(i)}
/>
</div>
);
}
if (i > 9 && i <= 14) {
rowThree.push(
<div key={i}>
<ImageButton
btnType={"Grid"}
imageSrc={this.props.icons[this.props.brigadeDesign[i]]}
clicked={() => this._onBrigadePosSelection(i)}
/>
</div>
);
}
}
So, when an image button is selected, it fires the onBrigadePosSelection function, which returns the selected button to the container for the grid where this function is then hit.
onBrigadePosSelected = slot => {
this.setState({ selectedDivision: slot });
console.log("This is the selected division: " + slot);
};
到目前为止,一切正常。网格呈现,当按下按钮时,此控制台日志会正确说明按下了哪个按钮。但这就是事情开始变得奇怪的地方。当状态改变时,他们当然是重新渲染,但是在重新渲染之后,selectedDivision 变得不确定。
最佳答案
查看您的代码,我认为问题出在以下几行:
clicked={() => this._onBrigadePosSelection(i)}
原因是i
每次迭代都会不断变化,但是 () => this._onBrigadePosSelection(i)
是动态调用的函数。
这意味着无论何时点击按钮,它都会得到最新的值i
。 (或垃圾或 undefined
)因为 i
已经收集了垃圾。
我建议您传递函数 this._onBridgePosSelection
作为props
并在 <ImageButton />
中调用它组件代替。
<ImageButton
btnType={"Grid"}
imageSrc={this.props.icons[this.props.brigadeDesign[i]]}
index={i}
onBrigadePosSelection={this._onBrigadePosSelection}
/>
然后里面<ImageButton />
组件,你可以这样调用它:
this.props.onBrigadePosSelection(this.props.index)
关于javascript - React Prop 在重新渲染时变得未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58716901/
我在 android 代码中使用 asmack XMPP。我可以正常登录 XMPP 服务器,但是当我尝试创建新用户时出现问题。我想要实现的是: 以管理员身份登录。 创建一个新用户。 从管理员注销。 以
这是我的标记页面,其中有一个按钮可以从数据库中搜索数据并显示在网格中 这是我背后的代码 if (!IsPostBack) { LblInfo.Text = "Page Load
当我多次将相同的 float 值插入到我的集合中时,本应花费恒定时间的 x in s 检查变得非常慢。为什么? 时序x in s的输出: 0.06 microseconds 0.09 mi
我有一个小型聊天客户端,可以将所有历史记录存储在 sqlite 数据库中。当用户单击我的应用程序中的 history 选项卡时,我的应用程序会获取所有相关历史记录并将其显示在 QWebView 中。我
我是一名优秀的程序员,十分优秀!