0

内小道具を変更し、私は簡単な質問があります。はネイティブリアクト - 同じコンポーネント

  1. それは(ない親コンポーネントから)リアクトネイティブコンポーネント内小道具(いない状態)を変更することは可能ですか?

  2. [1]の後、同じコンポーネント内の小道具を修正したい場合は、それを達成するにはどうすればいいですか?

  3. 私は次がある場合:

//親

render(){ 
    return <View><ChildComponent propA={this.state.propA} /></View> 
} 

triggerChangeInParent(val) { 
    this.setState({ 
    propA: val 
    }); 
} 

//チャイルド(ChildComponent)親と子の両方の部品を変更することが許可されている

render() { 
    return <View><Text>{this.props.propA}</Text></View> 
} 

triggerChangeInChild(val) { 
    //To set props.propA here 
} 

"propA"。最新のものをトリガーする人はどれも "propA"を変更するために優先されます(例えば、 "triggerChangeInChild"が "triggerChangeInParent"の後にトリガーされる場合、 "triggerChangeInChild"の "val"が "propA"のために使用されます)。

私たちが達成しないか、であること?ベストプラクティス/パターンがどのようなものです(この問題を解決することができるどのような解決策/代替)?

ありがとう!

+1

小道具は読み取り専用です。とにかく小道具を突然変異させようとしているのはなぜですか?その場合、おそらくいくつかのリファクタリングがあります。 – Li357

+0

リファクタリングがおそらく究極の動きになるでしょう。現在、変更にはかなりのコストがかかります(従来のものであり、修正にはかなりの時間がかかります)。回避策/解決策でこれが可能かどうかを知るために、公衆からの助言を求めるだけです。 – oatcrunch

答えて

0
  1. 状態が変更可能で、小道具を使うので、不変ですコンポーネント内の小道具を変更することはできません。現在のコンポーネントの外で行ってください。あなたがreduxを使用している場合は、reduce cer。

  2. 親でpropAを変更する必要があります。親でメソッドを書いてから、propを介して子に渡してください。あなたは子供からメソッドを呼び出すことができるので、あなたは子供の中で変更を行うことを意味します。

    contractor(props){ 
    
        super(props) 
        this.modifyPropsOnParent = this.modifyPropsOnParent.bind(this) 
    } 
    modifyPropsOnParent(){ 
    
        // do your change here 
    } 
    
    render() { 
        return <Child modifyPropsOnParent={this.modifyPropsOnParent} otherProp={yourProps} /> 
    } 
    

子this.propsによって、親メソッドを呼び出すことができます。 modifyPropsOnParent()

関連する問題