undefined不是一个对象(评估' this.state.starSide')

时间:2017-02-15 13:16:46

标签: reactjs react-native react-native-ios

这些是我的代码:

class StarListScrollViewCell extends Component{
static propTypes = {
    dateSource : React.PropTypes.array
}
constructor(props){
    super(props);
    this.state =  {
        starSide : 20,
    }
}
addStar(){
    LayoutAnimation.spring();
     this.setState({starSide: this.state.starSide + 10});
}
componentWillMount() {
    LayoutAnimation.spring();
}
render(){
    return(
        <View style={{backgroundColor: 'white' , height: 70 , width : Dimensions.get('window').width,flexDirection:'row'}}>
            <TouchableOpacity style={{backgroundColor: 'red' ,width:Dimensions.get('window').width/7,justifyContent:'center',alignItems:'center'}}
            onPress = {this.addStar()}>
                <Image source={require('./star-gray.png')}
                       style ={{width:this.state.starSide,
                           height:this.state.starSide,
                           justifyContent:'center',alignItems:'center'}}>

                </Image>
            </TouchableOpacity>
        </View>
    );
}

}

单击按钮时遇到错误。我将其编写为引用https://facebook.github.io/react-native/releases/next/docs/animations.html

4 个答案:

答案 0 :(得分:1)

当您从事件处理程序调用时,您必须将此绑定到addStar,因为此上下文已更改。

RecyclerView

同样在线上方运行正常,但会立即调用可能不是你的目的,所以改为使用

constructor(props){
    super(props);
    this.state =  {
        starSide : 20,
    }

     this.addStar = this.addStar.bind(this);


}

<TouchableOpacity onPress = {this.addStar()}>

答案 1 :(得分:0)

在JSX中使用它时应该将上下文绑定到处理程序,当你设置onPress prop时不要调用方法,只需传递对它的引用:

 <TouchableOpacity style={{backgroundColor: 'red' ,width:Dimensions.get('window').width/7,justifyContent:'center',alignItems:'center'}}
            onPress = {this.addStar.bind(this)}>

答案 2 :(得分:0)

React处理程序不会自动绑定到它们所在的元素/类。

onPress = {this.addStar()}>更改为

 onPress = {this.addStar.bind(this)}>

答案 3 :(得分:0)

您可以使用箭头功能代替绑定:

addStar = () => {
    LayoutAnimation.spring();
     this.setState({starSide: this.state.starSide + 10});
}

然后:

<TouchableOpacity onPress={this.addStar}>