import React from "react";
import "./styles.css";
import ButtonComponent from "./ButtonComponent";
import HoverComponent from "./HoverComponent";
export default class App extends React.Component {
render() {
return (
<div>
<ButtonComponent />
<HoverComponent />
</div>
);
}
}
Ta nhận thấy khi sử dụng sự kiện onClick hay sự kiện onMouseOver đều thực hiện một logic tăng giá trị lên 1 nhưng như vậy sẽ bị lặp lại logic, do đó HOCs ra đời để giải quyết vấn đề này
Bây giờ chúng ta sẽ tạo ra một HOCs có tên là WrapperComponent với mục đích thực hiện logic tăng giá trị lên 1
Mặc dù kết quả không thay đổi nhưng ta đã tái sử dụng được logic tăng giá trị lên 1 trên các component khác nhau
Tiếp đến ta sẽ truyền props có tên là name như đoạn code dưới
import React from "react";
import "./styles.css";
import ButtonComponent from "./ButtonComponent";
import HoverComponent from "./HoverComponent";
export default class App extends React.Component {
render() {
return (
<div>
<ButtonComponent name='PexpA' />
<HoverComponent />
</div>
);
}
}
nhưng kết quả
Không đúng với logic ta biết về cách sử dụng props chúng ta mong muốn kết quả trả về sẽ là
Lý do ở đây là ta đã có 1 HOCs bọc bên ngoài ButtonComponent mà HOCs chỉ có 2 props duy nhất là count và increment để sử dụng props từ ButtonComponent ta sẽ phải sửa lại WrapperComponent
Sử dụng spread syntax để duyệt toàn bộ các props của ButtonComponent
Ta có thể hiểu khi sử dụng HOCs nó sẽ thêm một số logic hoặc value vào component mà nó bọc bên ngoài
Khi WrapperComponent bọc ButtonComponent thì OriginalComponent tương đương với ButtonComponent
Lúc này ButtonComponent được bọc bởi WrapperComponent , chỉ có 2 props đó là increment và count khi chưa có {...this.props}
mặc dù bản thân ButtonComponent còn có 1 props nữa là name nhưng vẫn sẽ không hoạt động vì ButtonComponent mà ta đang sử dụng đã được bọc bởi một HOCs để sử dụng nó ta sẽ phải thêm {...this.props} với mục đích duyệt toàn bộ props từ OriginalComponent hay ButtonComponent chưa bọc bởi HOCs trong ví dụ