假设我的父组件有两个子组件:
Parent | Child1 | Child2
我从Child2得到一个输入,并把它传递给Parent组件(到目前为止,我知道怎么做),但是我需要把这个输入传递给Child1来更新它的状态。我该怎么做呢?
cvxl0en21#
希望您能理解主要思想-在Parent组件中创建一个函数,该函数将更改传递给Child1.ReactJS: Why is passing the component initial state a prop an anti-pattern?的值
class Parent extends Component { constructor(props){ super(props); this.state = { value: "" } } changeValue(value){ this.setState({value}); } render(){ return ( <div> <Child1 value={this.state.value}/> <Child2 changeValue={changeValue}/> </div> ) } } class Child2 extends Component { constructor(props) { super(props); this.state={ input: "" } } handleChange(e){ var {value} = e.target; this.setState({ input: value },() => this.props.changeValue(value)); } render(){ return ( <div> <input value={this.state.input} onChange={this.handleChange}/> </div> ) } } class Child1 extends Component { constructor(props) { super(props); this.state={value:''} } componentWillReceiveProps(nextProps) { this.setState({value: nextProps.value}) } render(){ return ( <div> {this.props.value} </div> ) } }
ozxc1zmp2#
可以在子组件中设置一个函数,根据父组件发送的值更新状态,也可以使用refs从父组件访问子组件的函数示例
refs
家长:
class Parent extends React.Component { funcUpdateChild1 = () => { this.child1.updateState('value here'); } render() { return ( <Child1 ref={(ip) => {this.child1 = ip}} /> <Child2 ref={(ip) => {this.child2 = ip}} /> ) } }
儿童1
class Child1 extends React.Component { updateState = (value) => { //use the value to set state here } render() { return ( //child1 contents here ) } }
ego6inou3#
组件父项
import React from 'react'; import MM from './modall'; class App extends React.Component { constructor() { super(); this.state = { naslov:'', telo:'' }; this.setStateHandler = this.setStateHandler.bind(this); this.postaviStanje = this.postaviStanje.bind(this); this.Stanje = this.Stanje.bind(this); } setStateHandler() { this.setState({ naslov: "Naslov Prvi u Modalu", telo:"Novo Prvo telo modala"}); }; postaviStanje(){ this.setState({naslov: " Novi drugi u Modalu", telo:"Novo drugo telo modala"}); }; Stanje(){ this.setState({naslov: " Novi treci u Modalu", telo:"Novo trece telo modala"}); }; render() { return ( <div> <button onClick = {this.setStateHandler} data-toggle="modal" data-target="#modal">SET STATE</button> <button onClick = {this.postaviStanje} data-toggle="modal" data-target="#modal">SET STATE2</button> <button onClick = {this.Stanje} data-toggle="modal" data-target="#modal">SET STATE3</button> <MM telo={this.state.telo} naslov={this.state.naslov} />) </div> ); } } export default App;
组件子项
/** * Created by trika on 31-Jan-18. */ import React,{Component} from 'react'; class Modal extends Component{ constructor(props) { super(props); this.state = { naslov:this.props.naslov, telo: this.props.telo }; } render(){ return( <div className="modal" id="modal" role="dialog"> <div className="modal-dialog" role="document"> <div className="modal-content"> <div className="modal-header"> <h1 className="modal-title"><strong>{this.props.naslov}</strong></h1> <button type="button" className="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div className="modal-body"> <p>Modal body text goes here.</p> <h2><strong>{this.props.telo}</strong></h2> </div> <div className="modal-footer"> <button type="button" className="btn btn-primary">Save changes</button> <button type="button" className="btn btn-secondary" data-dismiss="modal">Close</button> </div> </div> </div> </div> ); } } export default Modal;
zpf6vheq4#
带挂钩的现代解决方案:1.父组件:
const Parent = ({}) => { const [child2Data, setChild2Data] = useState(null); return( <view> <Child1 child2Data={child2Data} /> <Child2 setChild2Data={setChild2Data}/> </view> ) }
1.儿童2:
const Child2 = ({ setChild2Data }) => { const [data, setData] = useState(null); const _setData = (_data) => { setData(_data) setChild2Data(_data) } return( <view onClick={() => _setData("Any Data")}> </view> ) }
1.儿童1:
const Child1 = ({ child2Data }) => { const [data, setData] = useState(null); useEffect(() => { setData(child2Data) }, [child2Data]) }
4条答案
按热度按时间cvxl0en21#
希望您能理解主要思想-在Parent组件中创建一个函数,该函数将更改传递给Child1.ReactJS: Why is passing the component initial state a prop an anti-pattern?的值
ozxc1zmp2#
可以在子组件中设置一个函数,根据父组件发送的值更新状态,也可以使用
refs
从父组件访问子组件的函数示例
家长:
儿童1
ego6inou3#
组件父项
组件子项
zpf6vheq4#
带挂钩的现代解决方案:
1.父组件:
1.儿童2:
1.儿童1: