gpt4 book ai didi

javascript - 使用 setState() 使用 API 中的数据更新 View - ReactJS

转载 作者:行者123 更新时间:2023-12-01 01:07:49 25 4
gpt4 key购买 nike

我是 ReactJS 新手。在我当前的项目中,我正在将 Mongo 数据库中的数据填充到 HTML 表中,并且有一列带有复选框(根据数据库值动态创建)用于选择默认配置文件(见下图)。检查一个配置文件时,数据库中的特定配置文件将使用标记 true 进行更新,而其他配置文件则为 false

Profiles table

在复选框上单击它将调用 API 来更新数据库标志。更新数据库后,我需要调用 API 从同一集合中获取数据并更新表。我正在使用以下代码。

我正在尝试使用 setState 来呈现新数据而不刷新页面。我认为我在没有更好理解的情况下使用 setState ,我需要澄清这一点。我的问题是下面的代码有什么问题,除了使用 setState 之外,还有什么更好的方法来实现这种情况?

Profiles.jsx - render()

render() {
return (
<React.Fragment>
<div>
<table className="table">
<thead className="thead-dark">
<tr>
<th scope="col">ID</th>
<th scope="col">Create Date</th>
<th scope="col">Last Updated Date</th>
<th scope="col">Default Profile</th>
<th scope="col">Update</th>
<th scope="col">Delete</th>
</tr>
</thead>
<tbody>
{this.state.profilesData.map(prof => (
<tr key={prof._id}>
<th scope="row">{prof._id}</th>
<td>{prof.createdDate}</td>
<td>{prof.lastUpdatedDate}</td>
<td align="center">
{prof.defaultProfile === true ? (
<input
name="defaultProfileCheck"
type="checkbox"
aria-label="Checkbox for following text input"
onChange={() => this.toggleDefault(prof._id)}
defaultChecked
/>
) : (
<input
name="defaultProfileCheck"
type="checkbox"
aria-label="Checkbox for following text input"
onChange={() => this.toggleDefault(prof._id)}
/>
)}
</td>
<td>
<button type="button" className="btn btn-warning">
Update
</button>
</td>
<td>
<button type="button" className="btn btn-danger">
Delete
</button>
</td>
</tr>
))}
</tbody>
</table>
</div>
</React.Fragment>
);

}

toggleDefault - onChange

state = {
profilesData: []
};

async componentDidMount() {
const profiles = await getUserProfiles(); //Service Call
this.setState({ profilesData: profiles.data }); }

async toggleDefault(_id) {
if (window.confirm("Are you sure?")) {
try {
await setDefaultProfile(_id); //Service Call
} catch (ex) {
if (ex.response && ex.response.status === 404) toast.error(ex.message);
}
//toast.success("Done.");
const profiles = await getUserProfiles(); //Service call for get updated data
this.setState({ profilesData: profiles.data }); //Trying to setState for update view
} else {

}
}

谢谢。

最佳答案

这正是 ComponentDidUpdate 的用例。

请转到此处:https://reactjs.org/docs/react-component.html#componentdidupdate我在下面提供了一个示例,它将帮助您根据需要更新数据。

componentDidUpdate(prevProps, prevState, snapshot)
componentDidUpdate(prevProps) {
// Typical usage (don't forget to compare props):
if (this.props.userID !== prevProps.userID) {
this.fetchData(this.props.userID);
}
}

关于javascript - 使用 setState() 使用 API 中的数据更新 View - ReactJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55460140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com