Tôi có thành phần React gửi một thay đổi trạng thái redux trong hàm componentWillMount
của nó. Lý do là khi thành phần được tải, nó cần lấy số id
từ url (được hỗ trợ bởi react-router
) và kích hoạt một hành động thiết lập trạng thái với dữ liệu của id
đó.Ngăn thành phần phản ứng khỏi hiển thị hai lần khi sử dụng redux với componentWillMount
Dưới đây là các thành phần:
class Editor extends React.Component {
componentWillMount() {
const { dispatch, params } = this.props
dispatch(editItem(params.id))
}
render() {
const item = this.props.item
console.log("Editing", item)
}
}
export default connect(state => ({item: state.item}))(Editor)
Dưới đây là đánh bắt: render
là nhận được gọi là hai lần. item
không được xác định trên cuộc gọi đầu tiên và hợp lệ vào lần thứ hai. Lý tưởng nhất, nó chỉ nên được gọi khi this.props.item
thực sự tồn tại (sau khi hành động editItem
đã được gửi đi và chạy).
Theo số React docs: "Nếu bạn gọi setState
trong phương thức này, render()
sẽ thấy trạng thái được cập nhật và sẽ chỉ được thực hiện một lần bất kể thay đổi trạng thái".
Trong Redux, dispatch
tương đương với việc gọi setState
, vì nó dẫn đến thay đổi trạng thái. Tuy nhiên, tôi đoán một cái gì đó trong cách hoạt động connect
vẫn gây ra render
được gọi hai lần.
Có cách nào khác ngoài việc thêm một dòng như if (!item) return;
không?
'return LoaderComponent? : null' –
incleaf