2016-12-08 71 views
0

4天前我开始学习React原生。 我试图通过一个属性this不同的Scene,但是,我保持遇到此错误_this.setState is not a function。 我相信这不是重复的,因为我已经阅读了这两个堆栈的答案,他们的解决方案似乎没有帮助我。我有一些不同的设置,尽管如此想也许这可能是问题。this.setState React Native

React this.setState is not a function

this.setState is not a function

我知道REACT在今年以来有了很大的变化(所以经常如此),这些问题得到了答复这样想也许这可能是为什么他们没有为我工作。

import React, { Component } from 'react'; 
import { StyleSheet, Text, View, TouchableOpacity, TextInput, Platform, } from 'react-native'; 
import { Actions } from 'react-native-router-flux'; 

const Social =() => { 
state = { 
    name: '' 
} 
return (
    <View style={ styles.container }> 
    <Text style={ styles.Name } onPress={() => Actions.homepage()}> 
     Enter your Name: 
    </Text> 

    <TextInput style={ styles.TextInput} placeholder='PrimeTimeTran' onChangeText={(text) => { 
     this.setState({ 
     name: text, 
     }) 
    }} 
     value={this.state.name} 
    /> 
    <TouchableOpacity 
     onPress={() => { 
     alert(self.state.name) 
     }} 
    > 
     <Text style={ styles.buttonText }> 
     Next 
     </Text> 
    </TouchableOpacity> 
    </View> 
); 
} 

export default Social; 

我在这里(22:39)以下这个tutorial他似乎看穿了我的问题,没有问题就搞定了。本教程于2016年11月1日发布,所以我相信他的语法不应该存在问题。

一个更可能是重要的注意到,

我看到的唯一区别在于我的构造函数,我不使用render()return()而是一个return()本身;这可能是问题吗?

在此先感谢!

+1

而不是使用功能组件将其更改为'class'组件。当你返回JSX时,你的'this.state'是'undefined' –

+0

这工作,谢谢你。我完全错过了这部分=)。我感谢您的帮助! – PrimeTimeTran

+0

没有人会判断你,我们都开始在某个地方。每个程序员都曾经并可能仍然不确定某个级别。我已编辑您的问题以删除标题。 –

回答

4

社会组分是无国籍功能部件(使用()=> {}语法创建这里);这是一个纯粹的JavaScript功能。因此setState将不可用。如果您需要的组件来管理自己的状态,你需要通过延长React.Component来创建它:所以

https://facebook.github.io/react/docs/react-component.html#setstate

,可以按如下声明你的组件:

class Social extends React.Component { 
    //...implementation here 
} 

然后,您将可以访问setState以及其他组件生命周期方法。

(您添加的附加注释,也因为您使用的是无状态的功能部件 - 这些有效实施渲染功能,所以你能看到的只是该功能的一部分。)