【发布时间】:2021-06-05 03:13:32
【问题描述】:
我有这种形式的数据:
books = [{
id: 1,
name: "book-1",
audiences: [
{
audienceId: 1,
name: "Cat A",
critics: [
{ id: 5, name: "Jack" },
{ id: 45, name: "Mike" },
{ id: 32, name: "Amanda" }
],
readers: [
{ id: 11, fullName: "Mike Ross" },
{ id: 76, fullName: "Natalie J" },
{ id: 34, fullName: "Harvey Spectre" }
]
}]
表单是嵌套的。每本书都有评论家和读者,会根据 AudienceId 的值来渲染各个表单
<div className="App">
{books.map((book, index) => (
<div key={book.id}>
<h1>Books {index + 1}</h1>
{book.audiences.map((au) => (
<div key={au.audienceId}>
<h3>{au.name}</h3>
<Recap
audiences={au}
shouldRenderCritics={au.audienceId === 2}
shouldRenderReaders={au.audienceId === 1}
criticsChildren={renderByAudience(au.audienceId)}
readersChildren={renderByAudience(au.audienceId)}
/>
</div>
))}
</div>
))}
</div>
这是根据 AudienceId 呈现的表单
return (
<div className="root">
<div>
{props.audienceId === 1 && (
<A
setReader={setReader(readerIdx)}
reader={selectedReader as IreaderState}
/>
)}
</div>
<div>
{props.audienceId === 2 && (
<B
setCritic={setCritic(criticIdx)}
critic={selectedCritic as IcriticState}
/>
)}
</div>
</div>
);
最后,对于每个读者/评论家,都有一个表格可以输入。
export default function A(props: Aprops) {
const handleChange = (
event: ChangeEvent<{ value: number | string; name: string }>
) => {
const { name, value } = event.target;
const r = { ...props.reader };
r[name] = value;
props.setReader(r);
};
return (
<div>
<TextField
name="rate"
type="number"
value={get(props.reader, "rate", "")}
onChange={handleChange}
/>
<TextField
name="feedback"
value={get(props.reader, "feedback", "")}
onChange={handleChange}
/>
</div>
);
问题
每次我填写评论家/读者字段时,它都会为该对象设置状态,但也会为其余对象设置初始状态。它只设置焦点所在的表单状态,不保留其他表单的值
我不知道是什么导致了问题。
这里是一个沙盒重现问题https://codesandbox.io/s/project-u0m5n
【问题讨论】:
标签: reactjs react-hooks state use-state