Chỉnh sửa: Với việc giới thiệu Hooks
nó, có thể thực hiện một loại hành vi vòng đời cũng như trạng thái trong các Thành phần chức năng. Hiện tại
Hooks là một đề xuất tính năng mới cho phép bạn sử dụng trạng thái và các tính năng khác của React mà không cần viết một lớp. Chúng được phát hành trong React như một phần của v16.8.0
useEffect
hook có thể được sử dụng để tái tạo hành vi vòng đời và useState
có thể được sử dụng để lưu trữ trạng thái trong một thành phần chức năng.
Cú pháp cơ bản:
useEffect(callbackFunction, [dependentProps]) => cleanupFunction
Bạn có thể triển khai trường hợp sử dụng của mình trong các hook như
const grid = (props) => {
console.log(props);
let {skuRules} = props;
useEffect(() => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
}, []); // passing an empty array as second argument triggers the callback in useEffect only after the initial render thus replicating `componentDidMount` lifecycle behaviour
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
useEffect
cũng có thể trả về một chức năng sẽ được chạy khi thành phần được ngắt kết nối. Điều này có thể được sử dụng để hủy đăng ký cho người nghe, sao chép hành vi của componentWillUnmount
:
Vd: componentWillUnmount
useEffect(() => {
window.addEventListener('unhandledRejection', handler);
return () => {
window.removeEventListener('unhandledRejection', handler);
}
}, [])
Để tạo useEffect
điều kiện cho các sự kiện cụ thể, bạn có thể cung cấp cho nó một mảng giá trị để kiểm tra các thay đổi:
Vd: componentDidUpdate
componentDidUpdate(prevProps, prevState) {
const { counter } = this.props;
if (this.props.counter !== prevState.counter) {
// some action here
}
}
Móc tương đương
useEffect(() => {
// action here
}, [props.counter]); // checks for changes in the values in this array
Nếu bạn bao gồm mảng này, hãy đảm bảo bao gồm tất cả các giá trị từ phạm vi thành phần thay đổi theo thời gian (đạo cụ, trạng thái) hoặc bạn có thể tham chiếu đến các giá trị từ các lần hiển thị trước đó.
Có một số tinh tế khi sử dụng useEffect
; kiểm tra API Here
.
Trước v16.7.0
Thuộc tính của các thành phần chức năng là chúng không có quyền truy cập vào các chức năng vòng đời của Reacts hoặc this
từ khóa. Bạn cần mở rộng React.Component
lớp nếu bạn muốn sử dụng chức năng vòng đời.
class Grid extends React.Component {
constructor(props) {
super(props)
}
componentDidMount () {
if(!this.props.fetched) {
this.props.fetchRules();
}
console.log('mount it!');
}
render() {
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
}
Các thành phần chức năng hữu ích khi bạn chỉ muốn hiển thị Thành phần của mình mà không cần thêm logic.