Chế độ xem danh sách gốc phản hồi: Hàng không hiển thị lại sau khi trạng thái nguồn dữ liệu đã thay đổi.Hàng ListView gốc phản hồi không hiển thị lại sau khi thay đổi trạng thái
Đây là một phiên bản đơn giản của mã của tôi:
render(): {
return <ListView
dataSource={this.state.DS}
renderRow={this.renderRow}/>
}
renderRow(item): {
return <TouchableOpacity onPress={() => this.handlePress(item)}>
{this.renderButton(item.prop1)}
</TouchableOpacity>
}
renderButton(prop1): {
if (prop1 == true) {
return <Text> Active </Text>
} else {
return <Text> Inactive </Text>
}
}
handlePress(item): {
**Change the prop1 of *item* in an array (clone of dataSource), then**
this.setState({
DS: this.state.DS.cloneWithRows(arrayFromAbove)
})
}
Theo ví dụ của Facebook, ListView được coi rerender mọi nguồn dữ liệu thời gian được thay đổi. Có phải vì tôi chỉ thay đổi thuộc tính của một mục trong nguồn dữ liệu? Có vẻ như hàm renderRow không hiển thị lại, nhưng hàm render() là từ thay đổi nguồn dữ liệu.
Cảm ơn bạn.
Cảm ơn đã gợi ý/example! Tôi chắc chắn đã làm như vậy trong dự án của mình. Tôi tin rằng vấn đề là ListView không tái render một hàng khi nguồn dữ liệu là một mảng các đối tượng và chỉ là một thuộc tính của một đối tượng được thay đổi. Giao diện điều khiển cho tôi biết rằng thuộc tính của một đối tượng trong nguồn dữ liệu đã thực sự thay đổi, nhưng ListView không nhận ra nó và không định lại hàng đã thay đổi. Bạn có cách giải quyết có thể cho việc này không? – skleest
Nó sẽ trở lại nếu bạn gọi this.setState. Bạn có thể sao chép vấn đề ở đây không: https://rnplay.org/apps/Dw08-g. –
Chắc chắn, nó được nhân đôi ở đây (https://rnplay.org/apps/1-sNcQ). Có vẻ như nguồn dữ liệu đang thay đổi nhưng hàm renderRow không chạy. Cảm ơn bạn. – skleest