Khởi tạo object context bằng phương thức React.createContext(), sau đó chúng ta sẽ nhận được 1 object bao gồm các thuộc tính quan trọng như Provider và Consumer.
Sử dụng Provider bọc quanh các component, và truyền giá trị vào props value
Thêm Consumer vào bất cứ đâu mà bạn muốn chia sẻ context miễn là ở bên trong Provider, bạn có thể lấy gía trị của context thông qua props.chirlden.
Khởi tạo một Context Object, giá trị của defaultValue là giá trị mặc định của props value trong Provider.
Mỗi Context Object phải đi kèm với một Provider, nó cho phép bạn nhận về sự thay đổi của context.
Một React component được khởi chạy mỗi khi gía trị của context thay đổi, và nhận về giá trị của context đó.
Context.displayName Đặt tên cho Context, tên này sẽ được hiện thị trong DevTools.
contextType là một thuộc tính của class được tạo bởi React.createContext() được dùng để lấy giá trị của context.
Class
src\App.jsx
import { Component, createContext } from 'react';
//Khởi tạo môt
const NumberContext = createContext();
// !Part 1
class UpdateNumber extends Component {
render() {
return (
<button onClick={() => {
console.log(this.context.update())
}}>Update Number</button>
);
}
}
UpdateNumber.contextType = NumberContext;
// Part 1!
// Hoặc bạn có thể sử dụng code sau để thay thế.
// !Part 1 --
class UpdateNumber extends Component {
static contextType=NumberContext
render() {
return (
<button onClick={() => {
console.log(this.context.update())
}}>Update Number</button>
);
}
}
// !Part 2
class ShowNumber extends Component {
render() {
return (
<p>{this.context.number}</p>
);
}
}
ShowNumber.contextType = NumberContext;
// Part 2!
// Hoặc bạn có thể sử dụng code sau để thay thế.
// !Part 2 --
class ShowNumber extends Component {
static contextType=NumberContext
render() {
return (
<p>{this.context.number}</p>
);
}
}
// Part 2! --
export default class ContextComponent extends Component {
constructor(props) {
super(props);
this.state = {
number: 1,
};
}
updateNumber = () => {
this.setState({
number: Math.random(),
});
};
render() {
return (
<NumberContext.Provider
value={{
number: this.state.number,
update: this.updateNumber,
}}
>
<NumberContext.Consumer>
{() => (
<>
<ShowNumber />
<UpdateNumber />
</>
)}
</NumberContext.Consumer>
</NumberContext.Provider>
);
}
}
Hoặc sử dụng như sau vì chúng ta không sử dụng props.child có thể loại bỏ cũng được