Javascript 如何从表单提交中提升状态中的多个值?
我的目标是在提交表单时获取输入值和无线电输入值,并将它们的状态提升到父组件Javascript 如何从表单提交中提升状态中的多个值?,javascript,reactjs,state,Javascript,Reactjs,State,我的目标是在提交表单时获取输入值和无线电输入值,并将它们的状态提升到父组件App.js。我使用了两个onChange事件,当表单提交时,值由app.js中的单个函数支持和处理。这就是问题所在,因为我需要将两个值参数传递给handleNote函数。我知道我走错了路。提前谢谢 import React, { Component } from "react"; import "./styles.css"; import Header from "./H
App.js
。我使用了两个onChange事件,当表单提交时,值由app.js中的单个函数支持和处理。这就是问题所在,因为我需要将两个值参数传递给handleNote函数。我知道我走错了路。提前谢谢
import React, { Component } from "react";
import "./styles.css";
import Header from "./Header";
//app.js
class App extends Component {
handleColor = (value) => {
this.setState({
noteColor: value
});
};
handleNote = (value) => {
this.setState({
noteTitle: value
// noteColor: value,
});
};
render() {
return (
<div>
<Header handleNote={this.handleNote} handleColor={this.handleColor} />
</div>
);
}
}
export default App;
import React,{Component}来自“React”;
导入“/styles.css”;
从“/Header”导入标题;
//app.js
类应用程序扩展组件{
handleColor=(值)=>{
这是我的国家({
注颜色:值
});
};
handleNote=(值)=>{
这是我的国家({
注:价值
//注颜色:值,
});
};
render(){
返回(
);
}
}
导出默认应用程序;
import React,{Component}来自“React”;
导入“/styles.css”;
//Header.js
类头扩展组件{
构造函数(){
超级();
此.state={
注:“,
注颜色:“白色”
};
}
handleSubmit=e=>{
e、 预防默认值();
//提升状态至handleNote()
this.props.handleNote(this.state.note);
//在handleNote()中使用this.state.noteColor提升
this.props.handleColor(this.state.noteColor);
这是我的国家({
注:“”
});
};
handleChange=e=>{
这是我的国家({
注:e.target.value
//注意颜色应该在这里
});
};
handleColor=e=>{
这是我的国家({
注颜色:e.target.value
});
};
render(){
返回(
键入以后需要知道的任何内容。。。
白色
黄色的
红色
绿色
蓝色
紫色
);
}
}
导出默认标题;
当前已创建handleSubmit函数并将其分配给表单上的onSubmit,但没有任何内容启动该函数。添加
点击表单中的me
触发handleSubmit。导入React,{Component}从“React”开始;
import React, { Component } from "react";
import "./styles.css";
import Header from "./Header";
//app.js
class App extends Component {
handleNote = (title,color) => {
this.setState({
noteTitle: title
noteColor: color,
});
};
render() {
return (
<div>
<Header handleNote={this.handleNote} />
</div>
);
}
}
export default App;
import React, { Component } from "react";
import "./styles.css";
//Header.js
class Header extends Component {
constructor() {
super();
this.state = {
note: "",
noteColor: "white"
};
}
handleSubmit = e => {
e.preventDefault();
// lifting state to handleNote()
this.props.handleNote(this.state.note,this.state.noteColor);
this.setState({
note: ""
});
};
handleChange = (name,e) => {
this.setState({
[name]: e.target.value
});
};
render() {
return (
<form onSubmit={this.handleSubmit}>
<label htmlFor="name" className="sr-only">
Type anything that you need to know for later...
</label>
<input
type="text"
name="note"
placeholder={this.state.placeholder}
onChange={(e)=>this.handleChange("note",e)}
value={this.state.note}
required
/>
<div className="radio-container">
<label htmlFor="yellow" className="sr-only">
White
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="white"
id="white"
/>
<label htmlFor="yellow" className="sr-only">
Yellow
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="yellow"
id="yellow"
/>
<label htmlFor="yellow" className="sr-only">
Red
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="red"
id="red"
/>
<label htmlFor="yellow" className="sr-only">
Green
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="green"
id="green"
/>
<label htmlFor="yellow" className="sr-only">
Blue
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="blue"
id="blue"
/>
<label htmlFor="yellow" className="sr-only">
Purple
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="purple"
id="purple"
/>
</div>
</form>
);
}
}
export default Header;
导入“/styles.css”;
从“/Header”导入标题;
//app.js
类应用程序扩展组件{
handleNote=(标题、颜色)=>{
这是我的国家({
标题:标题
注颜色:颜色,
});
};
render(){
返回(
);
}
}
导出默认应用程序;
从“React”导入React,{Component};
导入“/styles.css”;
//Header.js
类头扩展组件{
构造函数(){
超级();
此.state={
注:“,
注颜色:“白色”
};
}
handleSubmit=e=>{
e、 预防默认值();
//提升状态至handleNote()
this.props.handleNote(this.state.note,this.state.noteColor);
这是我的国家({
注:“”
});
};
handleChange=(名称,e)=>{
这是我的国家({
[名称]:e.target.value
});
};
render(){
返回(
键入以后需要知道的任何内容。。。
this.handleChange(“note”,e)}
值={this.state.note}
必修的
/>
白色
this.handleChange(“noteColor”,e)}
type=“无线电”
name=“color”
value=“白色”
id=“白色”
/>
黄色的
this.handleChange(“noteColor”,e)}
type=“无线电”
name=“color”
value=“黄色”
id=“黄色”
/>
红色
this.handleChange(“noteColor”,e)}
type=“无线电”
name=“color”
value=“红色”
id=“红色”
/>
绿色
this.handleChange(“noteColor”,e)}
type=“无线电”
name=“color”
value=“绿色”
id=“绿色”
/>
蓝色
this.handleChange(“noteColor”,e)}
type=“无线电”
name=“color”
value=“蓝色”
id=“蓝色”
/>
紫色
this.handleChange(“noteColor”,e)}
type=“无线电”
name=“color”
value=“紫色”
id=“紫色”
/>
);
}
}
导出默认标题;
你把事情复杂化了一点。我会把它简化成这样:
App.js
import React,{Component}来自'React';
导入“./styles.css”;
从“./头”导入头;
类应用程序扩展组件{
handleNote=({note,noteColor})=>{
console.log('note',note);
console.log('notecolor',notecolor);
这是我的国家({
注:注:,
注意颜色,
});
};
render(){
console.log('this.state',this.state);
返回(
);
}
}
导出默认应用程序;
Header.js
import React,{Component}来自'React';
导入“./styles.css”;
类头扩展组件{
建造师(道具){
超级(道具);
常量初始状态={
注:'',
注颜色:'白色',
}
this.state=初始状态;
这个.handleChange.bind(这个);
}
handleChange=({target:{name,value}})=>{
这是我的国家({
[名称]:值,
});
};
render(){
返回(
{
e、 预防默认值();
this.props.handleNote(this.state);
//重置本地状态
此.setState(初始状态);
}}
>
键入以后需要知道的任何内容。。。
白色
黄色的
import React, { Component } from "react";
import "./styles.css";
import Header from "./Header";
//app.js
class App extends Component {
handleNote = (title,color) => {
this.setState({
noteTitle: title
noteColor: color,
});
};
render() {
return (
<div>
<Header handleNote={this.handleNote} />
</div>
);
}
}
export default App;
import React, { Component } from "react";
import "./styles.css";
//Header.js
class Header extends Component {
constructor() {
super();
this.state = {
note: "",
noteColor: "white"
};
}
handleSubmit = e => {
e.preventDefault();
// lifting state to handleNote()
this.props.handleNote(this.state.note,this.state.noteColor);
this.setState({
note: ""
});
};
handleChange = (name,e) => {
this.setState({
[name]: e.target.value
});
};
render() {
return (
<form onSubmit={this.handleSubmit}>
<label htmlFor="name" className="sr-only">
Type anything that you need to know for later...
</label>
<input
type="text"
name="note"
placeholder={this.state.placeholder}
onChange={(e)=>this.handleChange("note",e)}
value={this.state.note}
required
/>
<div className="radio-container">
<label htmlFor="yellow" className="sr-only">
White
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="white"
id="white"
/>
<label htmlFor="yellow" className="sr-only">
Yellow
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="yellow"
id="yellow"
/>
<label htmlFor="yellow" className="sr-only">
Red
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="red"
id="red"
/>
<label htmlFor="yellow" className="sr-only">
Green
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="green"
id="green"
/>
<label htmlFor="yellow" className="sr-only">
Blue
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="blue"
id="blue"
/>
<label htmlFor="yellow" className="sr-only">
Purple
</label>
<input
onChange={(e)=>this.handleChange("noteColor",e)}
type="radio"
name="color"
value="purple"
id="purple"
/>
</div>
</form>
);
}
}
export default Header;
import React, { Component } from 'react';
import './styles.css';
import Header from './Header';
class App extends Component {
handleNote = ({ note, noteColor }) => {
console.log('note', note);
console.log('notecolor', noteColor);
this.setState({
noteTitle: note,
noteColor,
});
};
render() {
console.log('this.state', this.state);
return (
<div>
<Header handleNote={this.handleNote} />
</div>
);
}
}
export default App;
import React, { Component } from 'react';
import './styles.css';
class Header extends Component {
constructor(props) {
super(props);
const initialState = {
note: '',
noteColor: 'white',
}
this.state = initialState;
this.handleChange.bind(this);
}
handleChange = ({ target: { name, value } }) => {
this.setState({
[name]: value,
});
};
render() {
return (
<form
onSubmit={e => {
e.preventDefault();
this.props.handleNote(this.state);
// reset local state
this.setState(initialState);
}}
>
<label htmlFor="name" className="sr-only">
Type anything that you need to know for later...
</label>
<input
type="text"
name="note"
placeholder={this.state.placeholder}
onChange={this.handleChange}
value={this.state.note}
required
/>
<div className="radio-container">
<label htmlFor="yellow" className="sr-only">
White
</label>
<input
onChange={this.handleChange}
type="radio"
name="noteColor"
value="white"
id="white"
/>
<label htmlFor="yellow" className="sr-only">
Yellow
</label>
<input
onChange={this.handleColor}
type="radio"
name="color"
value="yellow"
id="yellow"
/>
<label htmlFor="yellow" className="sr-only">
Red
</label>
<input
onChange={this.handleColor}
type="radio"
name="color"
value="red"
id="red"
/>
<label htmlFor="yellow" className="sr-only">
Green
</label>
<input
onChange={this.handleColor}
type="radio"
name="color"
value="green"
id="green"
/>
<label htmlFor="yellow" className="sr-only">
Blue
</label>
<input
onChange={this.handleColor}
type="radio"
name="color"
value="blue"
id="blue"
/>
<label htmlFor="yellow" className="sr-only">
Purple
</label>
<input
onChange={this.handleColor}
type="radio"
name="color"
value="purple"
id="purple"
/>
</div>
</form>
);
}
}
export default Header;