setState 提交而不是 onChange
setState on submit and not onChange
我有一个表单,我在其中使用来自输入字段的输入发送到后端。
例如,我有一个看起来像这样的变量:
const [data, setData] = useState([])
const [inputField, setInputField] = useState()
然后我有一个 form
看起来像这样:
<form onSubmit={fetchData}>
<input type="number" value={value} onChange={(e) => setInputField(e.target.value)} />
<button type="submit">Fetch data</button>
</form>
fetchData
由:
给出
function fetchData(e?: any) {
e?.preventDefault();
POST("/api", {
inputField: inputField,
}).then(async (response) => {
const json = await response.json();
setData({
retrievedData: json.retrievedData,
});
});
}
我还有其他表单,其中 onChange
更新很好,但对于某些输入字段我不需要它 update/re-render 在触发表单的实际提交按钮之前点击了。
那么如何在单击按钮时更新 inputField
的状态,而不是现在每次我在输入字段中写入新字符时它都会更新?
试试这个
import {useRef } from "react";
export const Temp = () => {
const inputField = useRef(null);
const onBtnClick = () => {
alert(inputField?.current?.value);
};
return (
<div>
<input type="text" ref={inputField} />
<button type="submit" onClick={onBtnClick}>
Fetch data
</button>
</div>
);
};
您可以为此使用 useRef
挂钩。
const inputNumber = useRef();
<input
ref={inputNumber}
id="number"
placeholder="33xx"
type="number"
/>
然后点击按钮你可以得到这样的值
inputNumber.current?.value,
你不需要一个状态,你甚至不需要一个参考。您可以直接从提交事件中获取表单值 (event.target.<input name>.value
)。您需要将 name
属性 添加到 <input />
以使其可从事件目标访问。请找到以下示例:
function Form() {
const [data, setData] = React.useState();
const onSubmit = (e) => {
e.preventDefault();
const inputField = e.target.inputField.value;
POST("/api", {
inputField: inputField,
}).then(async (response) => {
const json = await response.json();
setData({
retrievedData: json.retrievedData,
});
});
};
return (
<form onSubmit={onSubmit}>
<input type="text" name="inputField" />
<button type="submit">Submit</button>
</form>
);
}
ReactDOM.render(
<Form />,
document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
我有一个表单,我在其中使用来自输入字段的输入发送到后端。
例如,我有一个看起来像这样的变量:
const [data, setData] = useState([])
const [inputField, setInputField] = useState()
然后我有一个 form
看起来像这样:
<form onSubmit={fetchData}>
<input type="number" value={value} onChange={(e) => setInputField(e.target.value)} />
<button type="submit">Fetch data</button>
</form>
fetchData
由:
function fetchData(e?: any) {
e?.preventDefault();
POST("/api", {
inputField: inputField,
}).then(async (response) => {
const json = await response.json();
setData({
retrievedData: json.retrievedData,
});
});
}
我还有其他表单,其中 onChange
更新很好,但对于某些输入字段我不需要它 update/re-render 在触发表单的实际提交按钮之前点击了。
那么如何在单击按钮时更新 inputField
的状态,而不是现在每次我在输入字段中写入新字符时它都会更新?
试试这个
import {useRef } from "react";
export const Temp = () => {
const inputField = useRef(null);
const onBtnClick = () => {
alert(inputField?.current?.value);
};
return (
<div>
<input type="text" ref={inputField} />
<button type="submit" onClick={onBtnClick}>
Fetch data
</button>
</div>
);
};
您可以为此使用 useRef
挂钩。
const inputNumber = useRef();
<input
ref={inputNumber}
id="number"
placeholder="33xx"
type="number"
/>
然后点击按钮你可以得到这样的值
inputNumber.current?.value,
你不需要一个状态,你甚至不需要一个参考。您可以直接从提交事件中获取表单值 (event.target.<input name>.value
)。您需要将 name
属性 添加到 <input />
以使其可从事件目标访问。请找到以下示例:
function Form() {
const [data, setData] = React.useState();
const onSubmit = (e) => {
e.preventDefault();
const inputField = e.target.inputField.value;
POST("/api", {
inputField: inputField,
}).then(async (response) => {
const json = await response.json();
setData({
retrievedData: json.retrievedData,
});
});
};
return (
<form onSubmit={onSubmit}>
<input type="text" name="inputField" />
<button type="submit">Submit</button>
</form>
);
}
ReactDOM.render(
<Form />,
document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>