2017-11-23 5 views
0

関数をactions.jsファイルにエクスポートしたいだけですが、動作できません。 これは、作業台です:対応するネイティブコンポーネントから関数をエクスポートする

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

    onOpen =() => { 
    this.setState({visible:true}); 
    console.log(this.state.visible); 
    } 

    render() { 
    return (
     <View style={styles.container}> 
     <Button onPress={()=>{this.onOpen();}}>More</Button> 
     </View> 
    ); 
    } 
} 

そして今、私は私がボタンを押したときに私にエラーを与える、これを試してみました:

エラー:

Unhandled JS Exception: _this.setState is not a function. (In '_this.setState({ visible: true })', '_this.setState' is undefined) 

コード:

let onOpen =() => { 
    this.setState({visible:true}); 
    console.log(this.state.visible); 
} 

export default class HomeScreen extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     visible: false 
    } 
    this.onOpen = onOpen.bind(this); 
    } 

    render() { 
    return (
     <View style={styles.container}> 
     <Button onPress={()=>{this.onOpen();}}>More</Button> 
     </View> 
    ); 
    } 
} 
+0

エクスポートする機能について具体的に教えてください。 –

+0

私はあなたの意見を持っていましたが、クラスとOOPパターンの詳細と 'this'をどう使うべきですか –

答えて

1

コンポーネント 'クラス'の外に 'this'キーワードを使用することはできません。クラスの外部からコンポーネントの状態を変更することはできません。ここ

詳細:あなたはクラスの外のコンポーネントの状態を変更したい場合は Change state Outside Component

また、Reduxの状態を使用しています。

Redux JS

1

あなたのコードの問題は、あなたのクラスの外onOpenを定義したことで、あなたは、コンポーネントのsetState機能にアクセスしたいです。私はなぜonOpenがクラスに属しているので、これをやりたいのか分からない。しかし、もしあなたがこれを外のクラスに入れたいのであれば。

let onOpen = ({setState}) => { 
    //retrieve setState here 
    setState({visible:true}); 
} 

export default class HomeScreen extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     visible: false 
    } 
    // You don't have to do this if onOpen is not in your class 
    //this.onOpen = onOpen.bind(this); 
    } 

    render() { 
    //send this.setState to onOpen 
    const that = this; 

    return (
     <View style={styles.container}> 
     <Button onPress={()=>{onOpen({setState: that.setState});}}>More</Button> 
     </View> 
    ); 
    } 
} 
+0

あなたの返事をありがとうが、うまくいきません:私はエラーを受け取ります:undefined is not object。私の質問の理由は、クラスの中で非常に多くの状態と機能を持っているから、概観を失い、それをリファクタリングしたいということです。 – Schachjunge

+0

これはクラスをリファクタリングする正しい方法ではありません。代わりにあなたのアプリで 'redux'を使用し、より小さいReact Componentsを作成してください。 –

+0

また、私は答えを更新しました。今はうまくいくはずです。 –

関連する問題