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

时间:2014-03-18 22:10:48

标签: validation reactjs

我真的想基于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),

2 个答案:

答案 0 :(得分:0)

我不知道我是否正确理解了这个问题并且似乎与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,因为你的组件使用该方法扩展)

答案 1 :(得分:0)

当时PropTypes实际上非常孤立。最近有一个小小的更新,您现在应该可以更加独立地使用它们了:https://github.com/facebook/react/blob/master/src/core/ReactPropTypes.js

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

告诉我这是否有帮助!