-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprovider.js
63 lines (62 loc) · 1.67 KB
/
provider.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// const Header = ({data}) => <div>{data.title}</div>;
// const Text = ({data}) => <h1>{data.text}</h1>;
// const Block = ({data}) => <Text data={data}/>;
// const Content = ({data}) => (
// <div>
// <Header data={data}/>
// <Block data={data}/>
// </div>
// )
// const ListItem = ({data}) => <span>{data.listItem}</span>
// const List = ({data}) => <ListItem data={data}/>;
// const SideBar = ({data}) => <List data={data}/>;
// function App() {
// const data = {
// title: 'Hello World',
// text: 'This is a text',
// listItem: 'This is a list item',
// }
// return (
// <div>
// <SideBar data={data}/>
// <Content data={data}/>
// </div>
// )
// }
// 使用Provider高阶组件,我们可以使数据可供多个组件使用.
// Provider由Context对象提供
const DataContext = React.createContext();
function App() {
const data = {
title: 'Hello World',
text: 'This is a text',
listItem: 'This is a list item',
}
return (
<DataContext.Provider value={data}>
<SideBar/>
<Content/>
</DataContext.Provider>
)
}
const SideBar = () => <List/>
const List = () => <ListItem/>
const ListItem = () => {
const data = React.useContext(DataContext);
return <span>{data.listItem}</span>
}
const Content = () => (
<div>
<Header/>
<Block/>
</div>
)
const Header = () => {
const data = React.useContext(DataContext);
return <div>{data.title}</div>
}
const Block = () => <Text/>
const Text = () => {
const data = React.useContext(DataContext);
return <h1>{data.text}</h1>
}