【问题标题】:prop-types oneOf allows all stringsprop-types oneOf 允许所有字符串
【发布时间】:2019-09-05 21:47:52
【问题描述】:
export default function New(props: any) {
const { orientation } = props
    return (
        <React.Fragment>
        {orientation === 'horizontal' ? <HorizontalNew {...props} /> : <VerticalNew {...props} />
        </React.Fragment>
    )
}
New.propTypes = {
orientation: PropTypes.oneOf(['vertical', 'horizontal'])}

你好! 我试图搜索 propTypes 的 oneOf 函数,但在每个地方都说你可以在那里定义要验证的字符串,所以在这种情况下,我认为方向只允许“垂直”或“水平”,但会占用所有字符串的值,我可以从字面上使用任何字符串和作品。 这是任何类型的错误还是我错过了什么? 谢谢!

PS1:对不起我的英语不好

PS2:版本:prop-types:15.7.2,react:16.9.0

【问题讨论】:

  • 当您传递的值与定义的值不同时,您是否有任何控制台错误?
  • 没什么,页面呈现与“randomString”或“horizo​​ntal”相同,我的意思是不是批评错误,我可以继续处理视图,但主要想法是避免将来出现错误跨度>
  • 我能够复制和修复它,非常感谢!

标签: reactjs react-proptypes


【解决方案1】:

这可能是由于使用了 React 的缩小版 production 构建,而不是 development 构建。使用缩小的 production 构建将抑制警告。要查看警告,请使用 React 的 development 构建。

这里有两个示例,使用development 构建(有错误)和production 构建(有no 错误)。

发展

const HorizontalNew = () => 'Horizontal'
const VerticalNew = () => 'VerticalNew'

const New = (props) => {
  const { orientation } = props
  return (
    <div>
      {orientation === 'horizontal' ?
        <HorizontalNew {...props} /> :
        <VerticalNew {...props} />
      }
    </div>
  )
}

New.propTypes = {
  orientation: PropTypes.oneOf(['vertical', 'horizontal'])
}

ReactDOM.render(<New orientation="diagonal"/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.7.2/prop-types.js"></script>

<div id="app"></div>

生产

const HorizontalNew = () => 'Horizontal'
const VerticalNew = () => 'VerticalNew'

const New = (props) => {
  const { orientation } = props
  return (
    <div>
      {orientation === 'horizontal' ?
        <HorizontalNew {...props} /> :
        <VerticalNew {...props} />
      }
    </div>
  )
}

New.propTypes = {
  orientation: PropTypes.oneOf(['vertical', 'horizontal'])
}

ReactDOM.render(<New orientation="diagonal"/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.7.2/prop-types.min.js"></script>

<div id="app"></div>

【讨论】:

  • 这可能是,但只是一个问题,如果我使用 npm 并且我使用 npx create-react-app (附带一个 npm“start”脚本)创建了反应项目,不是那个脚本是开发模式启动吗?非常感谢您的回答和您的时间
  • 我现在可以复制并修复,非常感谢!!
  • 问题是否与 env 构建有关?还是别的什么?
  • 是的,是相关的,我在脚本中设置了错误的东西,有没有办法让 IDE 在 oneOf 上显示允许的道具类型(如 string : { "some string" || {"其他字符串"}) 还是只有我可以在控制台日志中看到?抱歉打扰了
  • 可能有一个 IDE 插件可以做到这一点,但我不知道。我知道的唯一方法是使用 TypeScript 或 Flow 之类的类型检查器。
猜你喜欢
  • 1970-01-01
  • 2017-12-05
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2016-12-16
  • 2014-06-21
相关资源
最近更新 更多