Reactjs Stateup - Tìm hiểu chi tiết về thông tin ReasctjS
28/09/2023 01:35
Để thu thập dữ liệu từ nhiều thành phần con hoặc để hai thành phần con giao tiếp với nhau, thay vào đó, bạn cần khai báo trạng thái chia sẻ trong thành phần cha của chúng.
Để thu thập dữ liệu từ nhiều thành phần con hoặc để hai thành phần con giao tiếp với nhau, thay vào đó, bạn cần khai báo trạng thái chia sẻ trong thành phần cha của chúng. Thành phần cha mẹ có thể chuyển trạng thái trở lại thành phần con bằng cách sử dụng đạo cụ; điều này giữ cho các thành phần con đồng bộ với nhau và với thành phần cha.
Việc nâng trạng thái lên thành phần gốc là điều phổ biến khi tái cấu trúc các thành phần React - hãy tận dụng cơ hội này để dùng thử.
Thêm một hàm tạo vào Board và đặt trạng thái ban đầu của Board chứa một mảng gồm 9 giá trị rỗng tương ứng với 9 ô vuông:
class Board extends React.Component {
constructor(props) { super(props); this.state = { squares: Array(9).fill(null), }; }
renderSquare(i) {
return <Square value={i} />;
}
Khi chúng ta điền vào bảng sau, this.state.squares
mảng sẽ trông giống như thế này:
[
'O', null, 'X',
'X', 'X', 'O',
'O', null, null,
]
Phương pháp của Hội đồng renderSquare
hiện tại trông như thế này:
renderSquare(i) {
return <Square value={i} />;
}
Lúc đầu, chúng tôi chuyểnvalue
phần chống đỡ từ Bảng xuống để hiển thị các số từ 0 đến 8 ở mỗi Ô. Ở bước khác trước đó, chúng tôi đã thay thế các số bằng dấu “X” được xác định bởi trạng thái của chính Square . Đây là lý do tại sao Square hiện đang bỏ qua value
đề xuất được Hội đồng quản trị thông qua.
Bây giờ chúng ta sẽ sử dụng lại cơ chế truyền prop. Chúng tôi sẽ sửa đổi Bảng để hướng dẫn từng Hình vuông riêng lẻ về giá trị hiện tại của nó ( 'X'
, 'O'
, hoặc null
). Chúng ta đã định nghĩa squares
mảng trong hàm tạo của Board và chúng ta sẽ sửa đổi renderSquare
phương thức của Board để đọc từ nó:
renderSquare(i) {
return <Square value={this.state.squares[i]} />; }
Xem mã đầy đủ tại thời điểm này
Mỗi Hình vuông bây giờ sẽ nhận được một value
chỗ dựa sẽ là 'X'
, 'O'
hoặc null
cho các hình vuông trống.
Tiếp theo, chúng ta cần thay đổi điều xảy ra khi người ta nhấp vào Hình vuông. Thành phần Board hiện duy trì các ô vuông đã được lấp đầy. Chúng ta cần tạo một cách để Square cập nhật trạng thái của Board. Vì trạng thái được coi là riêng tư đối với thành phần xác định nó nên chúng tôi không thể cập nhật trạng thái của Board trực tiếp từ Square.
Thay vào đó, chúng ta sẽ chuyển một hàm từ Bảng sang Quảng trường và chúng ta sẽ yêu cầu Square gọi hàm đó khi nhấp vào một hình vuông. Chúng ta sẽ thay đổi renderSquare
phương thức trong Board thành:
renderSquare(i) {
return (
<Square
value={this.state.squares[i]}
onClick={() => this.handleClick(i)} />
);
}
ây giờ chúng ta đang chuyển hai props từ Board sang Square: value
và onClick
. Prop onClick
là một hàm mà Square có thể gọi khi được nhấp vào. Chúng tôi sẽ thực hiện những thay đổi sau đối với Square:
- Thay thế
this.state.value
bằng trong phương thứcthis.props.value
của Squarerender
- Thay thế
this.setState()
bằng trong phương thứcthis.props.onClick()
của Squarerender
- Xóa
constructor
khỏi Square vì Square không còn theo dõi trạng thái của trò chơi
Sau những thay đổi này, thành phần Square trông như thế này:
class Square extends React.Component { render() { return (
<button
className="square"
onClick={() => this.props.onClick()} >
{this.props.value} </button>
);
}
}