Sex*_*yMF 2 javascript reactjs react-context
我想创建一个实际上来自某些异步服务(例如服务器数据)的上下文。
//the async service to bring the context data
export const fetchContextFromAsycnService = () => {
return new Promise(resolve => setTimeout(
() => resolve('Hey, im in the async context and I am the correct value'), 200)
);
}
class App extends Component {
render() {
let value = 'Im not the correct value';
fetchContextFromAsycnService().then(x => value = x as string);
return (
<AsyncContext.Provider value={value}>
<SomeComponent />
</AsyncContext.Provider>
);
}
}
//user the value
export const SomeComponent = ( ) => {
return (
<AsyncContext.Consumer>
{value => <div>{value}</div>}
</AsyncContext.Consumer>)
}
render(<App />, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
https://stackblitz.com/edit/react-ts-8zzbxa?file=index.tsx
预期值为:Hey, I'm in the async context and I am the correct value,但由于某种原因,我在获取数据后未获取数据。
有没有办法创建一个上下文
但由于某种原因,我在获取数据后没有获取数据。
value不是状态的一部分,不会导致重新渲染。因此,您没有看到提取后显示更新的值。
要实现此功能,只需使value状态的一部分重新渲染即可。
state = {
value: 'Im not the correct value'
}
componentDidMount() {
// move side-effects in here
fetchContextFromAsycnService().then(value => this.setState({ value }));
}
render() {
return (
<AsyncContext.Provider value={this.state.value}>
<SomeComponent />
</AsyncContext.Provider>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10148 次 |
| 最近记录: |