javascript - React 组件渲染不正确

标签 javascript reactjs

我有一个 react 项目,一个食谱盒,其中包括打开食谱和添加/删除成分的功能。这是a fiddle 。您可以单击菜谱名称来打开菜谱。有一个编辑按钮,可显示删除按钮并提供更改成分名称的选项。当按下“删除成分”按钮时,无论选择哪种成分,最后一个成分似乎总是被删除,但是当单击“完成”按钮并且可编辑输入框变回文本时,会显示正确的更改,删除适当的成分并保留最后一个成分。虽然这在功能上有效,但它显然对用户界面不太友好,我想知道为什么会发生这种情况。任何帮助都会很棒。

jsFiddle

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/

相关文章:

javascript - 如何在更改元素后保留 Bootstrap 工具提示?

javascript - 使用 JavaScript 或 PHP 在表中添加和减去值

Javascript - 替换中的正则表达式返回匹配的字符串

javascript - 在 Node.js 中进行动态查询的方法

javascript - 为什么React应用程序不保留nodejs服务器登录 session ?

ios - 错误: Invariant violation: tried to get frame for out of range index NaN in react-native-ios and fetch-api

javascript - 屏幕导航标题不会显示在堆叠的抽屉导航中....React Navigation V2

javascript - 使用reactjs获取API并显示在图表中

reactjs - 如何修复使用 create-react-app 构建后的白屏?

javascript - 尝试使 IRC 机器人的 URL-Matching RegEx 更快