我有一个 react 项目,一个食谱盒,其中包括打开食谱和添加/删除成分的功能。这是a fiddle 。您可以单击菜谱名称来打开菜谱。有一个编辑按钮,可显示删除按钮并提供更改成分名称的选项。当按下“删除成分”按钮时,无论选择哪种成分,最后一个成分似乎总是被删除,但是当单击“完成”按钮并且可编辑输入框变回文本时,会显示正确的更改,删除适当的成分并保留最后一个成分。虽然这在功能上有效,但它显然对用户界面不太友好,我想知道为什么会发生这种情况。任何帮助都会很棒。
class Input extends React.Component {
render() {
const array = this.props.update;
let booleanButton = null;
if (this.props.ingr) {
////////////////////////////
// here is the button's JSX
booleanButton = <button onClick=
{this.props.handleDeleteIngredient.bind(this, array)}>delete
ingredient</button>;
///////////////////////////
}
return (<div><form><input type="text" defaultValue={this.props.text}
onChange={this.props.onChange.bind(this, array)} /></form>{booleanButton}
</div>)
}
}
和处理程序:
handleDeleteIngredient(data, e ) {
var key = data[2];
var ingrs = this.state.ingrs;
ingrs.splice(key, 1);
this.setState({ingrs:ingrs});
}
最佳答案
您的描述非常令人困惑,根据您的 fiddle 代码,我认为您的问题是由于没有为您的列表项设置好键引起的。
从这一行中的内容来看,您没有 key={ingrs[i]} Prop ,尝试将其设置为 id 看看它会起作用,但是将成分名称作为键可能不是一个好主意,尝试给出一个实际的 ID。
ingrList.push(<Input key={ingrs[i]} handleDeleteIngredient={this.handleDeleteIngredient.bind(this)} id={id} update={[this.props.objectIndex, "ingrs", i]} onChange={this.onInputChangeIng.bind(this)} text={ingrs[i]} />);
关于javascript - React 组件渲染不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45406386/