【发布时间】:2021-09-14 14:14:10
【问题描述】:
我的代码(简化版):
const handleEdit = async (event) => {
event.preventDefault();
if (parentLayer === 0) {
const { content, attachment} = event.target.elements;
let contentValue = content.value;
setEditedContent(contentValue);
let attachmentValue = attachment.files[0];
if (contentValue !== content) await updateContent(contentValue);
if (attachmentValue !== undefined && parentLayer === 0) await updateImg(attachmentValue);
} else {
const { content } = event.target.elements;
let contentValue = content.value;
setEditedContent(contentValue);
if (contentValue !== content) await updateContent(contentValue);
}
};
const EditForm = (props) => {
const { content, parentLayer } = props;
const [editedContent, setEditedContent] = useState(content);
<div className='discussion'>
<form className='edit-discussion' onSubmit={handleEdit}>
{parentLayer === 0
?
// Can update img
<input type='file' id='files' name='attachment'/>
<textarea defaultValue={editedContent} required/>
<button type='submit' value='Submit'>submit</button>
:
<textarea defaultValue={editedContent} required/>
<button type='submit' value='Submit'>submit</button>
</form>
</div>
}
问题是,当 parentLayer === 0 时,editedContent 默认为来自 props 的 {content},
如果 parentLayer > 0,editedContent 为空字符串, 但我使用控制台检查了 {content} 的值是否正确。
我的问题,为什么 useState 不能在第二个条件下设置默认值。
为了更好的理解我的程序截图:
类似 Reddit 的网站,对未完成的界面表示抱歉:
编辑的时候可以看到只有父层有defaultValue:
为什么 React 会有这样的行为?
更新:
我的 React 程序结构:
Mainpage => 讨论页 => 通过计算得到 parentLayer 值 => 当 parentLayer === 0 时渲染顶部讨论块,否则渲染其余讨论块。 top block 或者 rest block 是否有editform组件。
也就是说,React 只会渲染一个页面组件,但会渲染多个 editform 子组件。
通过完整的视觉设计, 就像 Reddit(抱歉未完成的设计):
【问题讨论】:
-
您检查的条件没有任何意义。你能解释一下你想达到什么目标,什么时候以及为什么你需要一个默认值?
-
如果两个分支产生相同的输出,为什么要在渲染中进行条件检查?目前还不清楚你在问什么。请提供一个可运行的 minimal reproducible example 来演示问题,并具体说明您期望的行为与您观察到的行为。
标签: html css reactjs use-state