reactjs - 使用 typescript 中 Promise 中的值设置 React.FC 状态
问题描述
我是 React 的新手,我想将一组对象分配给 React.FC 状态。我的 api 逻辑如下所示:
class LandApi {
async getLands(): Promise<Land[]> {
const response = await fetch('http://localhost:8080/api/lands', {
method: 'GET',
headers: { 'Content-Type': 'application/json' }
});
return response.json();
}
}
我有这个功能组件:
const MapLands: React.FC = () =>
{
let [state, setState] = useState([])
useEffect(() => {
LandApi.getLands().then((data) => {
setState({
landList: data //the problem is here
})
})
})
return (
<div>
{
//Map logic here
}
</div>
)
}
如何将 Land[] 数组“放入”功能组件状态,以便稍后映射它?
正如您可能知道的那样,我对网络编程很陌生。
以诚挚的谢意,
塞缪尔
解决方案
假设 JSON API 返回一个数组,那么您几乎拥有它!
首先,为您的状态添加一个类型,因为 typescript 无法知道声明为[]
.
let [state, setState] = useState<Land[]>([])
然后将结果直接传递给setState()
,中间没有对象:
LandApi.getLands().then((data) => {
setState(data)
})
或者更简洁地说:
LandApi.getLands().then(setState)
这是有效的,因为它与之前的内联函数具有相同的签名。它需要一个参数,即新值。
推荐阅读
- anychart - anychart - 使用饼图创建地图图表
- html - 即使页面半空,如何将页脚设置为底部?
- fish - 打开 vim 模式,为什么 gU 将当前单词变为大写而不是等待移动?
- python - 如何修复 python rest api 上的错误 403?
- csl - 如何更改 CSL 中的折叠引用范围分隔符?
- javascript - 使用 Cypress 测试 wordpress 网站
- firebase - 为 Firebase 应用程序授权应用引擎版本
- javascript - 使用jquery每个函数循环项目并将项目包装到div容器中
- flutter - 有没有办法从飞镖/颤振中的音频中分割左右声道?
- c# - 自定义 IdentityDb 上下文以使用 ApplicationRole