如何在propTypes中声明样式?

How*_*ard 48 eslint react-native

启用了forbid-prop-types规则后,eslint禁止使用style: React.PropTypes.object,shape建议使用.

但是真的有必要为此目的定义所有可用的属性吗?

DEMO.propTypes = {
    style: React.PropTypes.shape({
        color: React.PropTypes.string,
        fontSize: React.PropTypes.number,
        ...
    })
};
Run Code Online (Sandbox Code Playgroud)

定义代码太多了!

NiF*_*iFi 49

React Native现在包含ViewPropTypes,将替换View.propTypes.style.用法示例:

import { ViewPropTypes } from 'react-native';

MyComponent.propTypes = {
  style: ViewPropTypes.style
};
Run Code Online (Sandbox Code Playgroud)

  • 你见过文字的等价物吗?React Native代码库中似乎不存在TextPropTypes View.propTypes在发布模式下的运行时不再存在,我不确定Text.propTypes是否确实存在. (6认同)
  • 它已被弃用为react-native-web https://github.com/necolas/react-native-web/releases/tag/0.12.0 (2认同)

tia*_*gob 33

View.propTypes.style
Run Code Online (Sandbox Code Playgroud)

要么

Text.propTypes.style
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

DEMO.propTypes = {
    style: Text.propTypes.style,
    ...
};
Run Code Online (Sandbox Code Playgroud)

https://facebook.github.io/react-native/releases/0.21/docs/style.html#pass-styles-around

  • 现在已弃用 (8认同)
  • 这个问题被标记为`reactjs`,这只是`react-native`吗? (6认同)
  • 小心!`View.propTypes`将在发布版本中被删除,因此你会有一个错误:`style of undefined` !! (对于`Text`也一样) (6认同)

Dav*_*don 20

一种可能性是使用react-style-proptype包,如下所示:

import stylePropType from 'react-style-proptype';

MyComponent.propTypes = {
  style: stylePropType,
};
Run Code Online (Sandbox Code Playgroud)


Jef*_*ang 9

使用下面的简单代码。

PropTypes.oneOfType([PropTypes.object, PropTypes.array])
Run Code Online (Sandbox Code Playgroud)

因此,您可以将此代码应用于此。

DEMO.propTypes = {
    style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
};
Run Code Online (Sandbox Code Playgroud)

在 RN > 0.57 中测试。