【发布时间】:2020-05-01 10:52:14
【问题描述】:
我使用fetch 向服务器发出请求并获得响应 - 类别列表。这个列表我显示在视图表中。在右侧的每个类别附近,我都有按钮 Edit。当我单击此按钮时,会出现 form,其中包含一个 input 和按钮 submit,我可以更改某个类别的标题。我使用 API 方法 PUT 更改类别。
但是当我在编辑类别标题后单击按钮submit 时,我的列表相同。因为列表没有更新。在那一刻,我仍然没有看到标题名称发生了变化。
我的列表只更新我在浏览器中重新加载页面
点击按钮EDIT后如何更新列表?
/..... - 我删除有问题的代码只是为了减少问题中的代码
Home.js:
const Home = () => {
const [value, setValue] = useState({
listCategory: [],
numberId: "",
isOpened: false,
/.....
});
useEffect(() => {
async function fetchData(/......) {
const response = await fetch(`/.....`, {
method: 'GET', headers: {/.....} });
const data = await response.json();
setValue(prev => ({
...prev,
listCategory: data.data,
/......
}));
} fetchData(/.....);
}, [/.....]);
const changeId = (argNumberId) => {
setValue({
...value,
numberId: argNumberId,
isOpened: true
});};
return (
<div>
<Table dataAttribute={value.listCategory} changeId={changeId} valueId={value.numberId} />
//COMPONENT WHICH CHANGE TITLE CATEGORY:
{value.isOpened && <ChangeCategory value={value.numberId} />}
</div>);};
ChangeCategory.js:
const ChangeCategory = (props) => {
const {handleSubmit, values, handleChange} = useFormik({
initialValues: {
title: '',
},
onSubmit: async (formValues) => {
const response = await fetch(`${apiUrl}/${props.value}`, { // props.value - id category which I edit, I get this id from field numberId in state
method:'PUT', body: JSON.stringify(formValues), headers: {/.....} });
const data = await response.json();
}});
return (
<div>
<form onSubmit={handleSubmit}>
<InputCategory
label="title"
id="title"
inputProps={{
name:'title',
value: values.title,
onChange: handleChange,
}}/>
<button type="submit">Edit</button>
</form>
</div>);};
Table.js:
export default (props) => (
<table>
<thead>
<tr>
<th>ID</th>
<th>TITLE</th>
</tr>
</thead>
<tbody>
{props.dataAttribute.map(item => (
<tr key={item.id}>
<td>{item.id} </td>
<td>{item.title} </td>
// BUTTON WHICH OPEN MODAL AND CHANGE ID IN STATE
<td><button onClick={() => props.changeId(item.id)}>Edit</button></td>
</tr>
))}
</tbody>
</table>
);
【问题讨论】:
-
数据提交成功后是否应该再次拨打
fetchData() -
@massam 你能在代码中展示如何做到这一点吗?并且在什么文件中执行它....因为我是初学者。
-
我认为您应该根据您的 put 请求的响应更新您的值。
-
我同意@acbay。无需再次获取数据。标题提交成功后,映射
listCategory类别并将新标题设置为更改的标题。 -
@radovix 你能回答我的问题并写下你支持的代码吗?
标签: javascript reactjs