使用 API 调用 unstated.js 初始化容器(React 上下文 API)
Initializing the Container with API call unstated.js (React Context API)
我想使用来自 unstated.js(React 上下文包装器)的 api 调用的数据简单地初始化容器状态。
我看到一个例子,其中容器是用几个变量实例化的:
import { Container} from 'unstated';
class WordlistContainer extends Container {
constructor(...words) {
super();
this.state = {
words: words
};
}
}
let wordList = new WordlistContainer('word1', 'word2');
export default wordList;
如果我想获取一些 api 数据以传递到此 Container 的状态 - 这是正确的方法吗?或者我应该从父组件传递道具?这是为了在 SPA 首次加载时将数据加载到 SPA。
这最终成功了:
import React, { Component } from 'react';
import RDOM from 'react-dom';
import { Container, Provider, Subscribe } from 'unstated';
class ApiContainer extends Container {
state = {
loading: true,
data: null
}
setApiResponseAsState = async () => {
fetch.('someapi').then(res => res.jsoj()).then( data => this.setState({ data, loading: false });
}
}
class ApiConsumer extends Component {
async componentDidMount() {
this.props.setApiResponseAsState();
}
render() {
return <div>{this.props.state}</div>
}
}
RDOM.render(
<Provider>
<Subscribe to={[ApiContainer]}>
{ props => <ApiConsumer {…props} />
}
</Subscribe>
</Provider>
, document.querySelector("#root");
)
一种直接的方法是使用容器的实例。
WordlistContainer
:
的示例实现
export default class WordlistContainer extends Container {
fetchWords = async () => {
const result = await fetch('https://example.com')
const words = await result.json()
this.setState({ words })
}
// etc... the rest of the container's code
}
// in this and most cases we want a singleton (but other instances can be created)
const wordlistContainer = new WordlistContainer()
export const getWordlistContainerInstance = () => wordlistContainer
然后,将此实例注入提供程序,如:
<Provider inject={[getWordlistContainerInstance()]}>
可以在任何地方触发抓取,方法是调用
getWordlistContainerInstance().fetchWords()
我想使用来自 unstated.js(React 上下文包装器)的 api 调用的数据简单地初始化容器状态。
我看到一个例子,其中容器是用几个变量实例化的:
import { Container} from 'unstated';
class WordlistContainer extends Container {
constructor(...words) {
super();
this.state = {
words: words
};
}
}
let wordList = new WordlistContainer('word1', 'word2');
export default wordList;
如果我想获取一些 api 数据以传递到此 Container 的状态 - 这是正确的方法吗?或者我应该从父组件传递道具?这是为了在 SPA 首次加载时将数据加载到 SPA。
这最终成功了:
import React, { Component } from 'react';
import RDOM from 'react-dom';
import { Container, Provider, Subscribe } from 'unstated';
class ApiContainer extends Container {
state = {
loading: true,
data: null
}
setApiResponseAsState = async () => {
fetch.('someapi').then(res => res.jsoj()).then( data => this.setState({ data, loading: false });
}
}
class ApiConsumer extends Component {
async componentDidMount() {
this.props.setApiResponseAsState();
}
render() {
return <div>{this.props.state}</div>
}
}
RDOM.render(
<Provider>
<Subscribe to={[ApiContainer]}>
{ props => <ApiConsumer {…props} />
}
</Subscribe>
</Provider>
, document.querySelector("#root");
)
一种直接的方法是使用容器的实例。
WordlistContainer
:
export default class WordlistContainer extends Container {
fetchWords = async () => {
const result = await fetch('https://example.com')
const words = await result.json()
this.setState({ words })
}
// etc... the rest of the container's code
}
// in this and most cases we want a singleton (but other instances can be created)
const wordlistContainer = new WordlistContainer()
export const getWordlistContainerInstance = () => wordlistContainer
然后,将此实例注入提供程序,如:
<Provider inject={[getWordlistContainerInstance()]}>
可以在任何地方触发抓取,方法是调用
getWordlistContainerInstance().fetchWords()