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