3 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
e.target
為您提供按鈕的參考,但在那里找不到表單的數(shù)據(jù)。您有重復(fù)的 type 屬性,
type="submit"
并且type="button"
type=submit 將提交表單,而 type=button 只是一個(gè)按鈕。
如果你不想使用 React 的狀態(tài),你可能無論如何都應(yīng)該使用。https://reactjs.org/docs/hooks-state.html,您可以將輸入元素包裝在一個(gè)form
元素中并附加onSubmit
表單的處理程序。將按鈕的類型更改為submit
(請(qǐng)記住添加preventDefault()
,這樣它就不會(huì)自動(dòng)“發(fā)布”表單)。
然后,e.currentTarget
您將可以訪問表單內(nèi)的所有元素。
const Test = () => {
const onFormSubmit = (e) => {
e.preventDefault();
e.stopPropagation();
const formData = new FormData(e.currentTarget);
for (let [name, value] of formData.entries()) {
/* makePost function here or something */
console.log(name + ":" + value);
}
}
return (
<form onSubmit={onFormSubmit}>
<div className="input-group mb-3">
<input type="text" className="form-control" name={"id_maybe"} placeholder="add a post"/>
<div class="input-group-append">
<button type="submit" class="btn btn-primary">Post</button>
</div>
</div>
</form>
);
}
ReactDOM.render(<Test />, document.getElementById("root"));
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
我想這就是你要找的
import React, { useState } from "react";
import "./style.css";
export default function App() {
? const [value, setValue] = useState("");
? const [posts, setPosts] = useState([]);
? const onSubmit = () => {
? ? posts.push(value);
? ? setPosts([...posts]);
? ? setValue("");
? };
? const handleInput = e => {
? ? setValue(e.target.value);
? };
? return (
? ? <div className="input-group mb-3">
? ? ? <input
? ? ? ? type="text"
? ? ? ? className="form-control"
? ? ? ? placeholder="add a post"
? ? ? ? value={value}
? ? ? ? onChange={handleInput}
? ? ? />
? ? ? <div class="input-group-append">
? ? ? ? <button class="btn btn-primary" onClick={onSubmit}>
? ? ? ? ? Add Post
? ? ? ? </button>
? ? ? </div>
? ? ? {posts.map(post => (
? ? ? ? <div>{post}</div>
? ? ? ))}
? ? </div>
? );
}

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為你的做法不對(duì)。恕我直言,您的代碼相當(dāng)草率。首先,你沒有<form>
元素。其次,你這樣做的方式很奇怪。您無需使用單獨(dú)的函數(shù),而是直接將箭頭函數(shù)插入到 中button
。
您還應(yīng)該使用State并將其添加到構(gòu)造函數(shù)中:
this.state = {
? items: [],
? text: ""
}
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
首先,handleChange在這里添加一個(gè)按鈕:
handleChange(event) {
? this.setState({ text: event.target.value });
}
您可以在提交功能中使用類似的內(nèi)容:
handleSubmit(event) {
? event.preventDefault();
? const newItem = {
? ? text: this.state.text,
? ? id: performance.now()
? };
? this.setState(state => ({
? ? items: state.items.concat(newItem),,
? ? text: ""
? }));
}
在渲染函數(shù)中更改此設(shè)置:
<form>
? ? <input type="text" className="form-control" onChange= {this.handleChange} value={this.state.text} placeholder="add a post"/>
? ? ? ? <div class="input-group-append">
? ? ? ? ? ? ? <button type="submit" class="btn btn-primary" onClick={this.handleSubmit}>Post</button>
? ? ? ? ?</div>
</form>
添加回答
舉報(bào)