当父组件的状态改变时,我需要重新渲染子组件。
在父组件中设置语言,一旦语言更改,子组件也必须更新为所选的语言。
Parent.js
import React, { Component } from "react";
import Child from "./Child.js";
class Parent extends Component {
constructor(props) {
super(props);
this.state ={
lblName: "Name",
lblGender: "Gender",
lblDOB: "Date Of Birth",
lblNatio: "Nationality",
};
}
ChangeLanguage(lang, e){
if(lang === "en"){
this.setState(
{
lblName: "Name",
lblGender: "Gender",
lblDOB: "Date Of Birth",
lblNatio: "Nationality",
});
}
else if(lang === "sp"){
this.setState(
{
lblName: "Nombre",
lblGender: "Género",
lblDOB: "Fecha de nacimiento",
lblNatio: "Nacionalidad",
});
}
}
render() {
return (
<Child ChildData={this.state}>
<button onClick = {this.ChangeLanguage.bind(this, en)}>English</button>
<button onClick = {this.ChangeLanguage.bind(this, sp)}>Spanish</button>
)}
}
将父状态传递给子组件并将其作为子组件
Child.js
import React, { Component } from "react";
class Parent extends Component {
constructor(props) {
super(props);
this.state = this.props.ChildData;
}
componentWillReceiveProps(nextProps){
this.forceUpdate();
this.setState(nextProps.ChildData);
}
render() {
return (
<div>
<div>
<label>lblName</label>
<input type="Text"></input>
</div>
<div>
<label>lblGender</label>
<input type="Text"></input>
</div>
<div>
<label>lblDOB</label>
<input type="Date"></input>
</div>
<div>
<label>lblNatio</label>
<input type="Text"></input>
</div>
</div>
)}
}
尝试使用forceUpdate和setState这两种解决方案……但都失败了。我想在父组件中任何时候更新标签的语言。