单击“重置”时,表单应返回到初始值,但“选择”元素将返回到可用的第一个选项,所有其他表单元素都使用了相同的方法,并且它们可以正确更新。
已经制作了一个Codesandbox问题的示例:https://codesandbox.io/s/lively-snowflake-tf5te
function App() {
// Data for select dropdown box - selected is Lime
const SelectData = ["Grapefruit", "Lime", "Coconut", "Mango"];
// Selected Value
const selectedValue = "Lime";
// Set state
const [selectBox, setSelectBox] = useState(selectedValue);
// Submit finction
const handleSubmit = e => {
e.preventDefault();
alert(`Select Selection #1: ${selectBox}`);
};
// Reset function
const handleReset = () => {
setSelectBox(selectedValue);
};
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>
When 'Reset' is clicked first options is selected
<br />
and not the state value.
</h2>
<form onSubmit={handleSubmit}>
<Select
label="Select Fruit"
value={selectBox}
handleChange={e => setSelectBox(e.target.value)}
data={SelectData}
/>
<br />
<br />
<input type="submit" value="Submit" />
<input type="reset" value="Reset" onClick={handleReset} />
</form>
<br />
Selectbox state value: {selectBox}
<br />
</div>
);
}
重置表单后,预期结果是Select元素值为“ Lime”,但为“ Grapefruit”。
答案 0 :(得分:2)
我在您的value
文件中将defaultValue
更改为DropDown.js
,它的工作原理就像是魅力。 Check the sandbox
<select defaultValue={value} onChange={handleChange}>
{data.map(item => (
<option key={item} value={item}>
{item}
</option>
))}
</select>
答案 1 :(得分:0)
您的代码正确。您的“错误”归因于<input type='reset'/>
。
将其更改为常规按钮,您会发现它工作正常。
<button onClick={handleReset}>Reset</button>
https://codesandbox.io/s/dark-cdn-qchu5
来自MDN:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/reset
类型为“ reset”的元素呈现为按钮,带有默认的click事件处理程序,该处理程序将表单中的所有输入重置为初始值。
这与您的受控组件相同。
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>
When 'Reset' is clicked first options is selected
<br />
and not the state value.
</h2>
<form onSubmit={handleSubmit}>
<Select
label="Select Fruit"
value={selectBox}
handleChange={e => setSelectBox(e.target.value)}
data={SelectData}
/>
<br />
<br />
<input type="submit" value="Submit" />
{/* <input type="reset" value="Reset" onClick={handleReset} /> */}
<button onClick={handleReset}>Reset</button>
</form>
<br />
Selectbox state value: {selectBox}
<br />
</div>
);
答案 2 :(得分:0)
即使select
是受控制的组件Form
doesn't support onReset
event。因此,该行为类似于$form.reset()
,当单击select
的{{1}}时,会将button
的值重置为默认值。
因此,另一种选择是在type=Reset
中使用defaultValue
道具,或者在select
道具中使用普通按钮。