如何在网络数据上使用流量?

时间:2017-10-25 10:14:31

标签: reactjs flowtype

流检查运行时类型错误吗?

让我说我有反应组件,显示用户对象的userName和Icon。 用户对象是

type User: {|
    name: string,
    icon: { url: string }
  |},

没有流程我写这个。

const MyIcon = ({user}) => {
  const name = user.name || ''
  const icon = user.icon || {}
  const url = icon.url || ''

  return <Image src={url}>
}

// other component
<MyIcon user={{}}

这不会给我错误。但这不会让我失望。默认值。

但是通过流程,我可以做到这一点

type User = {|
    name: string,
    icon: { url: string }
  |}

const MyIcon = ({user}: {user: User}) => {
  return <Image src={url}>
}

// other component
<MyIcon user={{}}

它给了我很好的错误。

但我的应用是从网络获取用户数据。网络请求可以为null。或者不是null只是错误的结构化对象。像这样。

const user = await getUserFromNetwork() 
// what if user={name: { q: 1 }, icon: null}

现在我的流程代码包含运行时错误。我不得不再次写这样的代码。

type User = {|
    name: string,
    icon: { url: string }
  |}

const MyIcon = ({user}: {user: User}) => {
  const name = user.name || ''
  const icon = user.icon || {}
  const url = icon.url || ''
  return <Image src={url}>
}

// other component
const user = await getUserFromNetwork() 
// what if user={name: { q: 1 }, icon: null}
<MyIcon user={user}

因此,与非流量版本相比,它只是额外的工作,使用Flow有什么意义?

即使我使用React的defaultProps user={name: { q: 1 }, icon: null}结果也有错误。

我错过了什么吗?或者流程仅用于源代码数据检查并在网络数据上使用它是错误的?

1 个答案:

答案 0 :(得分:1)

Flow仅检查代码的使用是否正确(根据提供的类型)。 不能确定网络数据的类型是否正确,但如果添加类型,则假定它是假的。

在您的情况下,您应该执行额外的检查,以确保它具有正确的类型。 如果没有,您可以添加默认值。