2016-04-26 11 views
29

flusso mi sta dando il seguente errore ogni volta che provo ad usare this.state nel mio codice:flusso (Reagire nativo) mi sta dando errori per l'utilizzo di 'this.state'

oggetto letterale: Questo tipo è incompatibile con indefinito. Hai dimenticato di dichiarare il tipo di parametro State di identificatore Component:?

Ecco il codice incriminato (anche se succede anche altrove):

class ExpandingCell extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     isExpanded: false 
    }; 
} 

Qualsiasi aiuto sarebbe molto apprezzato =)

+0

puoi postare le altre funzioni? – QoP

risposta

52

È necessario definire un tipo per la proprietà di stato prima di poterlo utilizzare.

class ComponentA extends Component { 
    state: { 
     isExpanded: Boolean; 
    }; 
    constructor(props) { 
     super(props); 
     this.state = { 
      isExpanded: false 
     }; 
    } 
} 
+0

Questa è davvero la risposta, grazie! Non sono ancora chiaro il motivo per cui l'app funzionava nonostante questo errore ... –

+0

Il motivo per cui l'app funzionava nonostante l'errore è dovuto al fatto che l'app non ne ha bisogno. Flow ha bisogno che sia in grado di eseguire correttamente il type checking ma non l'effettiva app. – edvinerikson

+1

Sarebbe bello se potessi ottenere il flusso per ignorare quell'errore quindi =) –

-19

eliminare il /* @flow */ in voi codice Flite superiore

+10

Ho ottenuto una buona risatina da questa risposta. – bmavity

+0

beh ... è corretto nel modo sbagliato ... – Andy

+0

Più contesto avrebbe dovuto essere fornito comprese le opzioni possibili ... ad es.correggere l'impostazione del flusso o disabilitare se non necessario. – Joe

5

Se stai usando flusso e si desidera impostare this.state in del constructor componente:


1. Crea una type per this.state

type State = { width: number, height: number } 

2. inizializzare il componente che type

export default class MyComponent extends Component<Props, State> { ... } 

3. Ora è possibile impostare this.state senza flusso errori

constructor(props: any) { 
    super(props) 
    this.state = { width: 0, height: 0 } 
    } 

Ecco un altro com esempio completo che aggiorna this.state con la larghezza e l'altezza del componente quando viene chiamato onLayout.

// @flow 

import React, {Component} from 'react' 
import {View} from 'react-native' 

type Props = { 
    someNumber: number, 
    someBool: boolean, 
    someFxn:() => any, 
} 

type State = { 
    width: number, 
    height: number, 
} 

export default class MyComponent extends Component<Props, State> { 

    constructor(props: any) { 
    super(props) 

    this.state = { 
     width: 0, 
     height: 0, 
    } 
    } 

    render() { 

    const onLayout = (event) => { 
     const {x, y, width, height} = event.nativeEvent.layout 
     this.setState({ 
     ...this.state, 
     width: width, 
     width: height, 
     }) 
    } 

    return (
     <View style={styles.container} onLayout={onLayout}> 

     ... 

     </View> 
    ) 
    } 
} 

const styles = StyleSheet.create({ 
    container: { 
    display: 'flex', 
    flexDirection: 'column', 
    justifyContent: 'center', 
    alignItems: 'center', 
    }, 
}) 
+0

Come utilizzare la definizione del tipo di 'Puntelli'? – Felix

Problemi correlati