2016-04-26 15 views
29

dòng chảy là cho tôi những lỗi sau bất cứ khi nào tôi cố gắng sử dụng this.state trong mã của tôi:Flow (Phản ứng Native) được đem lại cho tôi lỗi cho việc sử dụng 'this.state'

đối tượng theo nghĩa đen: loại này không tương thích với không xác định. Bạn đã quên khai báo tham số kiểu State định danh Component:

Đây là mã vi phạm (mặc dù nó xảy ra ở những nơi khác quá):

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

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao =)

+0

bạn có thể đăng các chức năng khác không? – QoP

Trả lời

52

Bạn cần xác định loại cho thuộc tính trạng thái trước khi có thể sử dụng.

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

Đó thực sự là câu trả lời, cảm ơn! Tôi vẫn chưa rõ lý do tại sao ứng dụng hoạt động bất chấp lỗi này ... –

+0

Lý do ứng dụng hoạt động mặc dù lỗi là do ứng dụng không cần ứng dụng đó. Dòng chảy cần nó để có thể làm loại kiểm tra một cách chính xác nhưng không phải là ứng dụng thực tế. – edvinerikson

+1

Nó chắc chắn sẽ là tuyệt vời nếu tôi có thể nhận được dòng chảy để bỏ qua lỗi đó sau đó =) –

-19

xóa /* @flow */ trong bạn mã flite đầu

+10

Tôi đã nhận được một cười khúc khích tốt trong câu trả lời này. – bmavity

+0

vâng ... đó là chính xác theo cách sai ... – Andy

+0

Nhiều bối cảnh nên được cung cấp bao gồm các tùy chọn có thể ... tức làsửa chữa thiết lập luồng hoặc vô hiệu hóa nếu không cần thiết. – Joe

5

Nếu bạn đang sử dụng dòng và muốn thiết lập this.state trong của constructor thành phần của bạn:


1. Tạo type cho this.state

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

2. Khởi tạo thành phần của bạn với điều đó type

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

3. Bây giờ bạn có thể đặt this.state mà không cần bất kỳ dòng lỗi

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

Dưới đây là một nhiều com ví dụ plete cập nhật this.state với chiều rộng và chiều cao của thành phần khi gọi 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

Cách sử dụng định nghĩa kiểu của 'Đạo cụ'? – Felix

Các vấn đề liên quan