AsyncStorage 非常适合这个。
从您的房屋的结构开始,我将创建一个数组来存储代表单个房屋的对象。
const houses = [
{
number: 1,
latitude: 51.5033,
longitude: -0.119519
}
]
保存到 AsyncStorage
当你想将你的收藏写到AsyncStorage,你可以这样做:
AsyncStorage
.setItem('@houses', JSON.stringify(houses))
.then(houses => console.log(houses)
static setItem(key: string, value: string, callback?: ?(error: ?Error) => void)
如果您的项目设置为支持async/await,您也可以使用它。
从 AsyncStorage 读取
从AsyncStorage 读取您的收藏只需通过以下方式完成:
AsyncStorage
.getItem('@houses')
.then(houses => console.log(JSON.parse(houses)))
您可以根据自己的状态设置响应,随心所欲。
删除特定房屋
这完全取决于您如何设置应用。你是不是要去map通过每个房子,例如创建一个列表组件?
(抱歉丢了右边的边框)
如果是这样,你可以:
houses.map(house => (
<View>
<Text>Number: {house.number}</Text>
<Text>Latitude: {house.latitude}</Text>
<Text>Longitude: {house.longitude</Text>
<Button onPress={() => this.deleteHouse(house.number)}/>
</View>
));
然后创建一个deleteHouse 函数来处理它。
const deleteHouse = (number) => {
const { houses } = this.state; // Assuming you set state as previously mentioned
const newHouses = houses.filter((house) => house.number != number);
this.setState({houses: newHouses}, () => saveHouses);
}
最后是 saveHouses 将其同步回 AsyncStorage。该函数将清除 AsyncStorage,然后保存新房屋。
const saveHouses = () => {
const { houses } = state;
AsyncStorage
.removeItem('@houses')
.then(() => {
AsyncStorage
.setItem('@houses', JSON.stringify(houses))
.then(houses => console.log(houses)
});
}