Match-id-a642a9a90565e0bc7897482ce61d1ac65f8120c5
This commit is contained in:
parent
e0ac32cda9
commit
3de86a411c
|
@ -51,7 +51,7 @@ export function recoverParentContext(vNode: VNode) {
|
||||||
|
|
||||||
while (parent !== null) {
|
while (parent !== null) {
|
||||||
if (parent.tag === ContextProvider) {
|
if (parent.tag === ContextProvider) {
|
||||||
parent.context = parent.props.value;
|
setContext(parent, parent.props.value);
|
||||||
}
|
}
|
||||||
parent = parent.parent;
|
parent = parent.parent;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ import * as Horizon from '@cloudsop/horizon/index.ts';
|
||||||
import { act } from '../../jest/customMatcher';
|
import { act } from '../../jest/customMatcher';
|
||||||
|
|
||||||
describe('useContext Hook Test', () => {
|
describe('useContext Hook Test', () => {
|
||||||
const { useState, useContext } = Horizon;
|
const { useState, useContext, createContext } = Horizon;
|
||||||
const { unmountComponentAtNode } = Horizon;
|
const { unmountComponentAtNode } = Horizon;
|
||||||
|
|
||||||
it('简单使用useContext', () => {
|
it('简单使用useContext', () => {
|
||||||
|
@ -14,16 +14,12 @@ describe('useContext Hook Test', () => {
|
||||||
const SystemLanguageContext = Horizon.createContext(defaultValue);
|
const SystemLanguageContext = Horizon.createContext(defaultValue);
|
||||||
|
|
||||||
const SystemLanguageProvider = ({ type, children }) => {
|
const SystemLanguageProvider = ({ type, children }) => {
|
||||||
return (
|
return <SystemLanguageContext.Provider value={{ type }}>{children}</SystemLanguageContext.Provider>;
|
||||||
<SystemLanguageContext.Provider value={{ type }}>
|
|
||||||
{children}
|
|
||||||
</SystemLanguageContext.Provider>
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
const TestFunction = () => {
|
const TestFunction = () => {
|
||||||
const context = useContext(SystemLanguageContext);
|
const context = useContext(SystemLanguageContext);
|
||||||
return <p id="p">{context.type}</p>;
|
return <p id="p">{context.type}</p>;
|
||||||
}
|
};
|
||||||
let setValue;
|
let setValue;
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const [value, _setValue] = useState(LanguageTypes.JAVA);
|
const [value, _setValue] = useState(LanguageTypes.JAVA);
|
||||||
|
@ -34,8 +30,8 @@ describe('useContext Hook Test', () => {
|
||||||
<TestFunction />
|
<TestFunction />
|
||||||
</SystemLanguageProvider>
|
</SystemLanguageProvider>
|
||||||
</div>
|
</div>
|
||||||
)
|
);
|
||||||
}
|
};
|
||||||
Horizon.render(<TestFunction />, container);
|
Horizon.render(<TestFunction />, container);
|
||||||
// 测试当Provider未提供时,获取到的默认值'JavaScript'。
|
// 测试当Provider未提供时,获取到的默认值'JavaScript'。
|
||||||
expect(container.querySelector('p').innerHTML).toBe('JavaScript');
|
expect(container.querySelector('p').innerHTML).toBe('JavaScript');
|
||||||
|
@ -47,4 +43,38 @@ describe('useContext Hook Test', () => {
|
||||||
act(() => setValue(LanguageTypes.JAVASCRIPT));
|
act(() => setValue(LanguageTypes.JAVASCRIPT));
|
||||||
expect(container.querySelector('p').innerHTML).toBe('JavaScript');
|
expect(container.querySelector('p').innerHTML).toBe('JavaScript');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('更新后useContext仍能获取到context', () => {
|
||||||
|
const Context = createContext({});
|
||||||
|
const ref = Horizon.createRef();
|
||||||
|
|
||||||
|
function App() {
|
||||||
|
return (
|
||||||
|
<Context.Provider
|
||||||
|
value={{
|
||||||
|
text: 'context',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Child />
|
||||||
|
</Context.Provider>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
let update;
|
||||||
|
|
||||||
|
function Child() {
|
||||||
|
const context = useContext(Context);
|
||||||
|
const [_, setState] = useState({});
|
||||||
|
update = () => setState({});
|
||||||
|
|
||||||
|
return <div ref={ref}>{context.text}</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
Horizon.render(<App />, container);
|
||||||
|
expect(ref.current.innerHTML).toBe('context');
|
||||||
|
|
||||||
|
update();
|
||||||
|
|
||||||
|
expect(ref.current.innerHTML).toBe('context');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue