Skip to content

Commit b499b0b

Browse files
committed
feat: Implement createContext, Provider, and Consumer apis
1 parent 979709c commit b499b0b

File tree

4 files changed

+44
-0
lines changed

4 files changed

+44
-0
lines changed

src/Consumer.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export default function Consumer(context) {
2+
return {
3+
data: () => ({
4+
context
5+
}),
6+
render(h) {
7+
console.log(context.value);
8+
return this.$scopedSlots.default(this.context.value);
9+
}
10+
};
11+
}

src/Provider.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
export default function Provider(context, defaultValue) {
2+
return {
3+
Provider: {
4+
props: {
5+
value: {
6+
default: () => defaultValue
7+
}
8+
},
9+
created() {
10+
context.value = this.value;
11+
},
12+
watch: {
13+
value(v) {
14+
context.value = v;
15+
}
16+
},
17+
render(h) {
18+
return this.$slots.default[0];
19+
}
20+
}
21+
};
22+
}

src/createContext.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Provider from "./Provider";
2+
import Consumer from "./Consumer";
3+
4+
export const createContext = defaultValue => {
5+
let context = {};
6+
return {
7+
Provider: Provider(context, defaultValue),
8+
Consumer: Consumer(context)
9+
};
10+
};

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { createContext } from "./createContext";

0 commit comments

Comments
 (0)