使用 Promise 从异步服务中反应 useContext
React useContext from async service with Promise
我想创建一个实际上来自某些异步服务的上下文(例如服务器数据)..
//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'));
https://stackblitz.com/edit/react-ts-8zzbxa?file=index.tsx
期望值是:Hey, I'm in the async context and I am the correct value
,但由于某种原因,我在获取数据后没有获取到数据。
有没有办法用
创建上下文
but for some reason im not getting the data after it was fetched.
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>
);
}
我想创建一个实际上来自某些异步服务的上下文(例如服务器数据)..
//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'));
https://stackblitz.com/edit/react-ts-8zzbxa?file=index.tsx
期望值是:Hey, I'm in the async context and I am the correct value
,但由于某种原因,我在获取数据后没有获取到数据。
有没有办法用
but for some reason im not getting the data after it was fetched.
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>
);
}