我正在工作 Reactjs Weather 项目。提交后,我在子组件(Form.js)中的一种方法中获取值,我需要在父组件(App.js)中获取该值。如何获得该值?
- App.js 文件(父组件)
getWeather = async (e) => {
e.preventDefault();
}
- Form.js 文件(子组件)
import React, { Component } from 'react'
import Background from '../video/rain_drop2.jpg';
import { ToastContainer, toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
import { MDBContainer,
MDBRow,
MDBCol,
MDBCard,
MDBCardBody,
MDBCardHeader,
MDBBtn,
MDBInput } from 'mdbreact'
const sectionStyle = {
backgroundImage: `url(${Background})`,
opacity: '0.92',
width: '90%',
backgroundSize: 'cover',
backgroundPosition: 'center',
height:'99%',
position:'absolute',
filter:'blur(1.8px)'
};
class Form extends React.Component {
constructor(props){
super(props);
this.state = {
fields: {},
errors: {}
}
}
handleValidation(){
let fields = this.state.fields;
let errors = {};
let formIsValid = true;
//Name
if(!fields["city"]){
formIsValid = false;
errors["city"] = "Cannot be empty";
}
this.setState({errors: errors});
return formIsValid;
}
submitDetails = (e) => {
e.preventDefault();
// I want this value to be accessed in App.js file
const city = e.target.city.value
console.log('VALUE', city)
browserHistory.push()
if(this.handleValidation()){
toast("Form Submitted!.")
}else{
toast("Form has errors.")
}
}
handleChange(field, e){
let fields = this.state.fields;
fields[field] = e.target.value;
this.setState({fields});
}
render(){
return (
<div>
<MDBContainer>
<MDBRow>
<MDBCol>
<MDBCard style={sectionStyle}></MDBCard>
<MDBCard className="card" style={{zIndex:'1', background: 'none'}}>
<MDBCardBody >
<MDBCardHeader style={{background: '#ecf0f1', opacity:'0.7', borderRadius: '10px',
fontFamily: 'Josefin Sans'}}>
<h3 className="my-3 text-center" style={{color: '#535c68'}}>
Weather Finder
</h3>
</MDBCardHeader>
<br/>
<form onSubmit= {this.submitDetails.bind(this)}>
<div className="blue-grey-text">
<span className="error">{this.state.errors["name"]}</span>
<MDBInput
ref="city"
label="City"
icon="city"
type="text"
name="city"
id="text-input"
onChange={this.handleChange.bind(this, "city")}
value={this.state.fields["city"]}
/>
<span style={{color: "red"}}>{this.state.errors["city"]}</span>
</div>
<br/>
<div className="text-center mt-4">
<MDBBtn
color="blue-grey"
className="mb-3"
type="submit"
value="Submit"
>
Search Weather
</MDBBtn>
<ToastContainer />
</div>
</form>
</MDBCardBody>
</MDBCard>
</MDBCol>
</MDBRow>
</MDBContainer>
</div>
)
}
}
export default Form;
任何建议都非常感谢......提前致谢