React 更新状态中的数组

IT技术 reactjs react-native
2022-07-08 01:05:06

我正在使用 react-native-maps 并尝试绘制多条折线。我在状态中对这个结构中的点进行了分组:

var groups = [{
    Key: 'YELLOW',
    Points: [],
}]

现在我想在 Points 数组中推送 lat/lng 对象,但它给出了对象不可扩展错误。我尝试使用 [... this.state.groups] 扩展属性,但我无法在其中推送点数。

我有一个单独的数组,其中包含一个包含所有点数据的类似结构。这里的概念是我需要将数据推送到这个组数据结构中,每个点都有延迟,所以折线/路线绘制得很慢。

3个回答

假设您具有以下结构

const groups = [{Key: 'YELLOW',Points: [],},{Key: 'BLUE',Points: [],}]

并且您想将一对推lat/lng入每个Points中,这可以通过这样做来实现

const pushPoint = point =>{
    const updatedGroups = group.map(group =>({
        ...group,
        Points : group.Points.concat(point)
    }))

    return updatedGroups
}

this.setState({groups : this.pushPoint(this.state.groups)})

您需要spread原始组,并Points通过返回一个新数组来覆盖属性,该数组是前一个Points和新连接的结果point

让他的nwe arry

 const totsl= [{key: 'YELLOW',Points: [],},{Key: 'BLUE',Points: [30,40],}],

要使用这个 .state.groups 你应该

state={groups = [{
    Key: 'YELLOW',
    Points: [],
}};

totsl.Points.map(item=>
this.setState({this.state.groups.Points:item})
to add in the state Points it should b use this syntax this.state({groups :{points:value"}}

,

告诉我它是否有效或仍有问题

我以这种方式使用 splice 和 concat 函数:

用于添加

this.setState((state) => {

    var newArray = [...state.cordinates, {
        latitude: point.latitude,
        longitude: point.longitude,
    }];

    return {
        cordinates: newArray,
    };

});

移除:

this.setState((state) => {

    var newArray = [...this.state.cordinates];

    newArray.splice(-1, 1);

    return {
        cordinates: newArray,
    };

});