javascript - 切片发生在代码中,但不会在 UI 中更新

标签 javascript html reactjs redux material-ui

  • 初始状态有三个下拉菜单。
  • 选择第一个下拉列表后,第二个下拉列表值将被加载
  • 选择第二个下拉值后。
  • 一组新的下拉负载。
  • 当我选择第二组的删除按钮时。
  • 它不会删除该集合,但会删除第一个集合。
  • 当我调试removeSelectedValue方法时,切片正确发生,但在更新中没有更新
  • 您能告诉我如何传递 queryComponents 值,以便它在 UI 中更新。
  • 你能告诉我如何解决这个问题吗?
  • 以便将来我自己修复它。
  • 在下面提供我的相关代码片段和沙箱。
  • 我的所有代码都在 demo.js 中

https://codesandbox.io/s/4x9lw9qrmx

removeSelectedValue = index => {
    console.log("removeSelectedValue--->", index);
    let seletedValues = this.state.queryComponents;
    seletedValues.splice(index, 1);
    console.log("spliced Values--->", seletedValues);
    this.setState({ queryComponents: seletedValues });
  };

  render() {
    let queryComp = this.state.queryComponents.map((value, index) => {
      return (
        <AutoCompleteComponent
          key={index}
          value={value}
          index={index}
          valueSelected={this.getSelectedValue}
          removeSeleted={this.removeSelectedValue}
        />
      );
    });

    return <div>{queryComp}</div>;
  }

最佳答案

当你这样做时let seletedValues = this.state.queryComponents; 您正在创建对该变量的引用,而不是制作副本。

您需要确保用新的对象/数组替换您的状态,以便重新渲染发生。

请尝试这个:

removeSelectedValue = index => {
    this.setState(prevState => ({
        queryComponents: prevState.seletedValues.filter((a, i) => (i !== index));
    });
};

该过滤器函数相当于您使用的拼接,但返回一个新数组而不是修改原始数组。

另一方面,我传递 setState 一个使用 prevState 的函数,从而使代码更短。

关于javascript - 切片发生在代码中,但不会在 UI 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841700/

相关文章:

javascript - 通过 jQuery 提交表单时 Required 不起作用?

javascript - 如何使用代码注入(inject)调试 Chrome 扩展示例?

javascript - 在 HTML5 数字输入中验证 0.5 作为步长值

html - 如何在 bootstrap 上使用 HTML 创建固定页脚

javascript - react : Pass onClick function on all Children Components

javascript - 如何将 OffscreenCanvas 转换为 DataURI

javascript - 动态插入的包含文本的 div 的宽度

html - 外部样式表是否在 HTML 之前加载?

css - 如何制作具有不同行高的语义 UI React 网格全屏?

javascript - 使用来自另一个数组的查询的多个条件过滤数组