当前位置: 首页 > 面试题库 >

如何在React Native中更新数组状态

班承恩
2023-03-14
问题内容

我正在尝试仅更新数组状态中的一个元素,但不确定如何执行此操作。

State

constructor(props) {
    super(props);
    this.state = {
        markers: [],
    };
}

设定状态

 setCurrentLocation() {
    var root = this;
    root.setState({
        markers: [
            ...root.state.markers,
            {
                coordinate: {
                    latitude: parseFloat(root.state.currentLat),
                    longitude: parseFloat(root.state.currentLon)
                },
                key: root.state.currentLat,
                image: pinCurrentLocation

            },
        ],
    });
}

如果我想更改标记的第四个元素中的键,该怎么做?

谢谢


问题答案:

重要的一点是,我们不应该直接更改状态数组,而要始终在新数组中进行更改,然后使用setState更新状态值。

Doc 建议:

切勿直接更改this.state,将this.state视为不可变。

更新状态数组的基本流程是:

1- 首先创建状态数组的副本。

2- 查找项目的索引(如果有索引,请跳过这一步)。

3- 更新该索引处的项目值。

4- 使用setState更新状态值。

可能有多种解决方案:

1- 使用 array.map
并检查要更新的元素,当发现该元素返回具有已更新键值的对象的新对象时,否则返回相同的对象。像这样:

let newMarkers = markers.map(el => (
      el.name==='name'? {...el, key: value}: el
))
this.setState({ markers });

2- 我们还可以使用 array.findIndex
查找该特定项目的索引,然后更新该项目的值。像这样:

let markers = [...this.state.markers];
let index = markers.findIndex(el => el.name === 'name');
markers[index] = {...markers[index], key: value};
this.setState({ markers });

如果我们知道项目的索引,则不需要循环,我们可以直接编写:

let markers = [ ...this.state.markers ];
markers[index] = {...markers[index], key: value};
this.setState({ markers });


 类似资料:
  • 本文向大家介绍如何更新组件的状态?相关面试题,主要包含被问及如何更新组件的状态?时的应答技巧和注意事项,需要的朋友参考一下 ReactDOM.render this.setState this.forceUpdate useState useReducer

  • 问题内容: 我已经检索了使用useState存储在对象数组中的数据,然后将这些数据输出到表单字段中。现在,我希望能够在键入时更新字段(状态)。 我看过一些例子,说明人们在更新数组中属性的状态,但是从不更新对象数组中的状态,所以我不知道该怎么做。我已经将对象的索引传递给了回调函数,但是我不知道如何使用它来更新状态。 问题答案: 这是您的操作方式:

  • 问题内容: 我的结构如下所示: 组件3应该根据组件5的状态显示一些数据。由于道具是不可变的,我不能简单地将其状态保存在组件1中并转发它,对吗?是的,我已经阅读了有关redux的内容,但不想使用它。我希望有可能通过反应来解决。我错了吗? 问题答案: 对于孩子与父母的通信,您应该传递一个将状态从父母设置为孩子的函数,如下所示 这样,孩子可以通过调用通过props传递的函数来更新父母的状态。 但是您将不

  • 问题内容: 我想更新一个数组值,但我不确定要执行的正确方法,因此我尝试了以下方法,但没有为我工作。 我的模型,我模型中的子域 我的查询 谁能给我帮助。谢谢。 问题答案: 你不能同时使用 ,并 在相同的更新表达式作为嵌套的运营商。 使用更新运算符的正确语法如下: 在那里可以来自任何指定的更新列表运营商的位置。 要将一个新元素添加到数组中,只需一个 运算符即可,例如,您可以使用 update方法将修改

  • 我有一个highlight模式为:

  • 我正在将父组件的状态从父组件传递到子组件。在子组件中,我有一个不同的状态。我正在对子组件的状态执行一些操作,并且结果必须添加到父组件的状态。因此,在我的父组件中,我编写了一个回调函数,该函数将更新父组件的状态。代码为: 因此,这个函数随后作为道具传递给子组件: 然后在我的子组件中,我试图实现回调函数为: 但这并没有达到预期效果。这是正确的方法吗?有人能帮我吗? 我试图通过实现这里提供的解决方案来解