React JS:如何在提交时将值传递给其他组件
React JS: How to pass a value to other Component onSubmit
我尝试创建一个按钮,点击它会弹出 window。弹出 window 包含一个表单,可以让我输入任何新条目。提交时,应将条目传递给主要组件。
我有两个组成部分。主要成分是 'App' 成分,另一个成分是 'Popup' 成分。
这是我的代码:
App.js
import React, { Component } from "react";
import Popup from "./Popup.js";
import "./styles.css";
class App extends Component {
showPopup = false;
createEntry = () => {
this.showPopup = true;
this.setState({ showPopup: this.showPopup });
};
handleSubmit = (value) => {
console.log("New Entry: " + value);
this.showPopup = false;
this.setState({ showPopup: this.showPopup });
};
render() {
return (
<React.Fragment>
<button onClick={this.createEntry}> + </button>
{this.showPopup ? <Popup handleSubmit={this.handleSubmit} /> : null}
</React.Fragment>
);
}
}
export default App;
Popup.js
import React, { Component } from "react";
import "./styles.css";
class Popup extends Component {
constructor(props) {
super(props);
this.state = {
value: ""
};
// I want to pass the submitted value to the App Component
this.handleSubmit = this.props.handleSubmit.bind(this, this.state.value);
this.handleChange = this.handleChange.bind(this);
}
handleChange = (event) => {
this.setState({ value: event.target.value });
};
render() {
return (
<React.Fragment>
<div className="popup">
<div className="popup_inner">
<div> Create New Entry </div>
<form onSubmit={this.handleSubmit}>
<label>
<input
type="text"
name="name"
value={this.state.value}
onChange={this.handleChange}
/>
</label>
<input type="submit" value="Submit" />
</form>
</div>
</div>
</React.Fragment>
);
}
}
export default Popup;
styles.css
.App {
font-family: sans-serif;
text-align: center;
}
.popup {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
background-color: rgba(0, 0, 0, 0.5);
}
.popup_inner {
position: absolute;
left: 25%;
right: 25%;
top: 25%;
bottom: 25%;
margin: auto;
background: white;
}
我试图通过使用 handleSubmit 作为 prop 方法将 'value' 传递给 'handleSubmit' 方法,但这不起作用。
将值传递给 App 组件的合适方法是什么?
我还是 React 的新手,所以请多多包涵。
提前致谢。
答案就在你的问题中。您将它作为道具方法传递,因此您必须从道具中访问它。
在您的 Popup.js 中,您可以调用从您的父级传递的方法
onSubmit = {this.props.handleSubmit}
我创建了一个 CodeSandBox 来演示从父组件到子组件的数据流,反之亦然
我尝试创建一个按钮,点击它会弹出 window。弹出 window 包含一个表单,可以让我输入任何新条目。提交时,应将条目传递给主要组件。
我有两个组成部分。主要成分是 'App' 成分,另一个成分是 'Popup' 成分。
这是我的代码:
App.js
import React, { Component } from "react";
import Popup from "./Popup.js";
import "./styles.css";
class App extends Component {
showPopup = false;
createEntry = () => {
this.showPopup = true;
this.setState({ showPopup: this.showPopup });
};
handleSubmit = (value) => {
console.log("New Entry: " + value);
this.showPopup = false;
this.setState({ showPopup: this.showPopup });
};
render() {
return (
<React.Fragment>
<button onClick={this.createEntry}> + </button>
{this.showPopup ? <Popup handleSubmit={this.handleSubmit} /> : null}
</React.Fragment>
);
}
}
export default App;
Popup.js
import React, { Component } from "react";
import "./styles.css";
class Popup extends Component {
constructor(props) {
super(props);
this.state = {
value: ""
};
// I want to pass the submitted value to the App Component
this.handleSubmit = this.props.handleSubmit.bind(this, this.state.value);
this.handleChange = this.handleChange.bind(this);
}
handleChange = (event) => {
this.setState({ value: event.target.value });
};
render() {
return (
<React.Fragment>
<div className="popup">
<div className="popup_inner">
<div> Create New Entry </div>
<form onSubmit={this.handleSubmit}>
<label>
<input
type="text"
name="name"
value={this.state.value}
onChange={this.handleChange}
/>
</label>
<input type="submit" value="Submit" />
</form>
</div>
</div>
</React.Fragment>
);
}
}
export default Popup;
styles.css
.App {
font-family: sans-serif;
text-align: center;
}
.popup {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
background-color: rgba(0, 0, 0, 0.5);
}
.popup_inner {
position: absolute;
left: 25%;
right: 25%;
top: 25%;
bottom: 25%;
margin: auto;
background: white;
}
我试图通过使用 handleSubmit 作为 prop 方法将 'value' 传递给 'handleSubmit' 方法,但这不起作用。
将值传递给 App 组件的合适方法是什么?
我还是 React 的新手,所以请多多包涵。
提前致谢。
答案就在你的问题中。您将它作为道具方法传递,因此您必须从道具中访问它。 在您的 Popup.js 中,您可以调用从您的父级传递的方法
onSubmit = {this.props.handleSubmit}
我创建了一个 CodeSandBox 来演示从父组件到子组件的数据流,反之亦然