开发者问题收集

React 在方法中更新状态并将其传递

2020-01-17
639

我尝试在方法 start() 中更新状态,然后将状态的值传递给 MyComponent。 我的组件工作正常,当我在类中设置它时,状态更新正常,但是当我尝试从 start 方法传递它时 - 它不起作用。得到“TypeError:this.setState 不是函数”

已编辑 - 修复绑定但仍然不起作用。

可能是什么问题?

export default class App extends Component{
  constructor (props){
    super(props);
    this.state = {
      val: false
    }
    this.start= this.start.bind(this)

  }

  start() {
    this.setState({ val: true })
  }

  render(){
    return (
      <View>
        <Button 
        title='start' 
        onPress={this.start}>
        </Button>

        <MyComponent value={this.state.val}> </MyComponent>
      </View>
    );
  }
}

这是 MyComponent:

class MyComponent extends Component {
     constructor(props){
         super(props)
         this.state={}
         this.state.custum={
            backgroundColor: 'red'
         }
         let intervalid;
         if (this.props.value){
            setTimeout(() => {
                this.setState( {
                    custum:{
                        backgroundColor: 'green'
                    }
                    })
            }, 1000);
            setTimeout(() => {
                this.setState( {
                    custum:{
                        backgroundColor: 'red'
                    }
                    })
            }, 2000);
        }
     }    
    render() {
        return (
            <View style={[styles.old, this.state.custum]}> 
            </View>
        );
      }
    }  
    var styles = StyleSheet.create({
        old:{
          padding: 5,
          height: 80,
          width: 80,  
          borderRadius:160,    

        },
    })
export default MyComponent;
3个回答

您必须将上下文绑定到您的函数。

 constructor (props){
      super(props);
        this.state = {
        val: false
    }
    this.start = this.start.bind(this)
  }

或者您也可以使用箭头函数,无需绑定

 start = () => {
     this.setState({ val: true })
 }
Roman Unt
2020-01-17

将启动方法绑定到组件其他“ this”的启动函数

917581080
Aldrin
2020-01-17

您需要通过构造函数或 ES6 箭头函数绑定 start 函数。

export default class App extends Component{
  constructor (props){
    super(props);
    this.state = {
      val: false
    }
  }

  start = () => {
    this.setState({ val: true })
  }

  render(){
    return (
      <View>
        <Button 
        title='start' 
        onPress={this.start}>
        </Button>

        <MyComponent value={this.state.val}> </MyComponent>
      </View>
    );
  }
}
Rise
2020-01-17