如何验证 React.propTypes 中的输入以获取自定义函数的输入?

Posted

技术标签:

【中文标题】如何验证 React.propTypes 中的输入以获取自定义函数的输入?【英文标题】:How to validate input like in React.propTypes for the input of custom functions? 【发布时间】:2014-04-24 21:15:18 【问题描述】:

我真的很喜欢基于 React 风格强制/验证数据,但我发现很难将它们的类与库分离以更通用。我怎么可能做到? (注意不是表单验证)

我给一个函数一个对象,我希望该函数根据“模式”验证该输入:

 function(input)
      validate(input, 
           test: Validator.Number
      )
 

请注意,它还支持嵌套数组和对象验证。 http://facebook.github.io/react/docs/reusable-components.html

我尝试过https://github.com/molnarg/js-schema,但扩展了原生对象Number.min(0).max(5),

【问题讨论】:

对不起.. 那我该怎么办?无论如何,我认为这可能对其他人有所帮助。 我是否应该问它“如何像 React 道具类型一样验证...”才能不被关闭? 我已经更新了我的问题...如果没有人在这里回复,我会放在那里。 好的,我已经更新了正文。 好多了。我撤回了我的近距离投票,我将清理 cmets。 :-) 【参考方案1】:

当时,PropTypes 实际上被很好地隔离了。最近有一个小更新,你现在应该可以更独立地使用它们了:https://github.com/facebook/react/blob/master/src/core/ReactPropTypes.js

用法如下:https://github.com/facebook/react/blob/master/src/core/ReactCompositeComponent.js#L947

告诉我这是否有帮助!

【讨论】:

我稍后会检查它,现在我有点忙于其他事情所以我不知道它是否有效(:希望我稍后不要忘记回复你 【参考方案2】:

我不知道我是否正确理解了这个问题,并且似乎与 javascript 以及如何编写和模块化 javascript 代码更相关,您可以使用 browserify http://browserify.org/,在 js 文件中声明您的模型(架构)并在你的反应文件包括它......他们调用 Duck(myDuck) 并检查布尔结果以验证输入......如果它是真的添加到你的状态(或任何你想要的)并且如果它失败处理这个......

您也可以尝试混合 facebook.github.io/react/docs/reusable-components.html,但它似乎与组件中的“扩展”功能更相关,尽管我认为您可以完美地使用它们...

  var schemas = DuckValidation : schema(age: ....), CatValidation : schema()

  var myComponent = React.createClass(
     mixins: [schemas], // Use the mixin

     onSubmitCat: function(obj) 
        this.CatValidation(obj) ? this.sendToServer(obj) : this.showError()
        return false
     ,

     render: function() 
       .....
     
 );

虽然我认为如果您不想扩展组件的功能,则使用 browserify 是更好的选择(检查是否比使用 this.CatValidation,因为您的组件是使用该方法扩展的)

【讨论】:

这不是我要找的。我正在寻找一个库或一种方法来验证某些功能的某些输入。只是泛型函数,与 React.js 无关。我希望这个库像 React.js PropsTypes。

以上是关于如何验证 React.propTypes 中的输入以获取自定义函数的输入?的主要内容,如果未能解决你的问题,请参考以下文章

React PropTypes 的多重验证

如何在 ReactJS 中验证嵌套对象的 PropTypes?

React组件属性部类(propTypes)校验

React的类型检测PropTypes

React组件的防呆机制(propTypes)

React系列Props 验证