【发布时间】:2022-01-16 11:18:44
【问题描述】:
我有一个使用 React JS 创建的简单表单。我有 2 个文本字段,类型和年份,以及一个下拉列表,即汽车。使用来自 API 的值填充汽车下拉列表。用户为前 2 个字段输入文本值,然后从下拉菜单中选择 car 的值并点击添加。我有另一个帖子 API 可以捕获这个值。我可以存储和设置文本框的值,但对于下拉列表,汽车的值没有被捕获,我得到一个空值。如何像存储其他 2 个文本框一样存储 car 的值
import { useHistory } from "react-router-dom";
import axios from "axios";
import React,{useState,useEffect} from 'react';
function NewCar() {
const [type, setType] = useState("");
const [year, setYear] = useState("");
const [car, setCar] = useState("");
let history = useHistory();
const [entries,setEntries]=useState([])
useEffect(() => {
fetchValues();
}, [])
useEffect(() => {
console.log(entries)
}, [entries])
const fetchValues = async()=>{
const response = await axios('http://localhost:8080/cars');
setEntries(response.data)
}
const onSubmit = function (e) {
e.preventDefault();
axios
.post("http://localhost:8080/update", {
type,
year,
car
})
.then(() => history.push("/"));
};
return (
<form onSubmit={onSubmit}>
<table border="1">
Type:{" "}
<input
name="type"
value={type}
onChange={(e) => setType(e.target.value)}
/>
<br />
Year:{" "}
<textarea
name="year"
value={year}
onChange={(e) => setYear(e.target.value)}
></textarea>{" "}
<br />
<label for="car">Car:</label>
<select id="car" name="car">
{entries.map((entry) => (
<option value={entry.name}>{entry.name}</option>
))}
name="car"
value={car}
onChange={(e) => setCar(e.target.value)}
</select>
<br />
</table>
<button>Add</button>
</form>
);
}
export default NewCar;
【问题讨论】:
-
使用 onChange 来选择你正在做的输入。 Select 将从其选项中获取其值。 Exarcise :尝试添加一些值来选择,如果您会发现默认选择具有该值的选项。
-
这是一个错误的“react-native”标签吗?在我看来像 HTML。
-
嗨@jnpdx 如果我没记错的话,react 和 react-native 的语法几乎相同;唯一的区别是在应用程序上使用了 react-native。也许他正在使用 react-native。
-
@MohammadKhan 在某种意义上你是正确的(React 部分非常相似),但是诸如“form”“table”“br”“input”等实体都是 HTML 实体,未在 React Native 中使用(除非从某种第三方包中导出)。
-
@jnpdx 哦,我明白了。我的错。我认为最好删除 react-native 标签,因为它不是本文的重点。感谢您以如此友好的方式向我解释或证明您:))
标签: javascript html css reactjs