reactjs - 当下拉值更改时,setState 未正确设置状态
问题描述
我有这种情况,我有一个下拉菜单,它会拉出用户的帐户,然后根据其选择更改页面的内容。我正在尝试一种如下所示的方法,似乎 setState 没有被正确调用,或者调用序列可能是错误的。没有真正得到什么是错的。更改下拉值不会更新内容。
帮助将不胜感激。
import * as React from 'react';
import Select from 'semantic-ui-react/dist/commonjs/addons/Select';
interface IState{
accountDetails[], // stores all details w.r.t an account
userAccounts: [], // stores all accounts w.r.t a user
selectedAccount : string, // selected account from the dropdown
[x: string] : any,
}
export default class App extends React.Component<{},IState> {
constructor(props:any){
super(props);
this.state = {
accountDetails: [],
userAccounts: [],
selectedAccount: ''
}
}
dropdownChange = (event: React.SyntheticEvent<HTMLElement>, data:any) => {
this.setState(prevState => ({
selectedAccount: data.value
}), () => {});
}
async componentDidMount()
{
await this.fetchUserAccounts();
}
fetchUserAccounts = async() => {
//fetch API call for getting all user accounts by passing a user ID
// I am able to get the data
fetch('/api/fetch/accounts'
.then(response => response.json())
.then(data => this.setState({ userAccounts: data}));
this.fetchAccountDetails();
}
fetchAccountDetails = async() =>
{
let URL = "/api/fetch/account?accountId=" +this.state.selectedAccount;
fetch('URL'
.then(response => response.json())
.then(data => this.setState({ accountDetails: data}));
}
render() {
return(
<div>
<Select
options={this.state.userAccounts}
name="selectedAccount"
value={this.state.selectedAccount}
onChange={this.dropdownChange}
/>
// component to display the details
<DetailComponent accounts={this.state.accountDetails} />
</div>
)
}
}
解决方案
您需要fetchAccountDetails
在更改状态后立即调用,以便使用下拉列表已更改的最新状态调用该函数:
dropdownChange = (event: React.SyntheticEvent<HTMLElement>, data:any) => {
this.setState(prevState => ({
selectedAccount: data.value
}), () => { this.fetchAccountDetails() });
}
推荐阅读
- docker - 通过 kubectl 暴露服务时,从节点主机上没有监听端口
- javascript - 在循环 ForEach 之前等待确认
- html - 导航项下方带有子菜单的全宽下拉菜单
- selenium - 范围报告仅保存 Jenkins 中最后一项作业的最后一项结果
- c# - 如何计算 3d 扫描的腹部周长?
- java - 当二维数组 [][] 和数组 [] 之间的赋值是合法的?
- powershell - 删除一个txt文件除第一行以外的内容
- javascript - 如何修复一个简单的 js 计算器(返回未定义)
- elasticsearch - 如何在弹性搜索中加载数据?
- python - 如何暂停 Python 脚本并让用户在 Linux 终端中输入