Как setState () зависит от того, какой компонент вызывается func? - PullRequest
0 голосов
/ 21 января 2019

Я хочу установить динамическое состояние в зависимости от того, какая функция вызывается, я знаю, если мы не можем setstate при рендеринге, но все же мне нужно сделать это, чтобы установить динамическое состояние,

есть какой-то способчтобы сделать это возможным?

export default class Foo extends Component {
  constructor(props) {
    super(props);
    this.state={
      dynamicView:false
    }
  }
  renderText(key, value){
    this.setState({[key]:value})
    <Text>Simple render</Text>
  }
  renderButton(key, value){
    this.setState({[key]:value})
    <Text>Simple render</Text>
  }
  render(){
    return(
      <View>
        {this.state.dynamicView ? this.renderButton("button","ValueButton") : this.renderText("text", "valueText")}
        <Button
          title="change Component"
          onPress={()=>this.setState({dynamicView:!this.state.dynamicView})}
        />
        <Button
          title="Isi State"
          onPress={()=>alert(JSON.stringify(this.state,null,4))}
        />
      </View>
    )
  }
}

с этим кодом я могу установить динамическое состояние, но проблема в том, что оба из component function вызваны, у меня есть два состояния (button and text), я хочу избежать этого,так что у меня просто 1 состояние (button / text) в зависимости от того, какой компонент отображается,

как я могу это сделать?

Примечание: это всего лишь простой вариант использования, всенужно знать, это установить состояние в зависимости от того, какая функция вызывается

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я думаю, что вам нужно иметь другую переменную в состоянии и обновлять ее, основываясь на функции, запущенной на основе условия dynamicView.

export default class Foo extends Component {
  constructor(props) {
  super(props);
   this.state={
     dynamicView:false,
     viewType:''
   }
 }
  renderText(viewType){
    this.setState(viewType)
    <Text>Simple render</Text>
  }

 renderButton(viewType){
   this.setState({viewType})
   <Text>Simple render</Text>
  }

 render(){
   return(
    <View>
     {this.state.dynamicView ? this.renderButton("button","ValueButton") : 
      this.renderText("text", "valueText")}
      <Button
       title="change Component"
       onPress={()=>this.setState({dynamicView:!this.state.dynamicView})}
       />
      <Button
       title="Isi State"
       onPress={()=>alert(JSON.stringify(this.state,null,4))}
      />
   </View>
  )
 }
}
0 голосов
/ 21 января 2019

Если вы хотите сохранить только состояние кнопки или текста, вам следует подумать об изменении другого состояния.

    renderText(key, value){
    this.setState({[key]:value})
    this.setState({button:false})
    <Text>Simple render</Text>
  }
...