如何对待React.createClass()中的自定义javascript属性?

这是示例:

var RouterView = React.createClass({
  mixins: [Morearty.Mixin],
  isAuthorized: false,      // should it be part of state ??
  isVerified: false,        // should it be part of state ??
  bindToAuthorization: function() {
    if(/* blah-blah-blah */) {
      this.isAuthorized = true;
    }
  },
  render: ...
});


好像.isAuthorized.isVerified在语义上应该像组件的状态一样工作,但这只是.createClass()规范的属性。

.isAuthorized.isVerified如何起作用?它的行为类似于static吗?在React的文档中找不到关于此的任何信息。

最佳答案

这取决于授权发生的位置。

如果确定授权的逻辑发生在子组件中-并且仅在子组件中-那么它将处于子组件状态。这意味着isAuthorizedisVerified不会是道具,它们会在您的子组件中显示。而bindToAuthorization将由组件本身而不是其父项定义。

不过,更有可能的是,您希望将授权逻辑放在组件层次结构中的更高位置,或将其完全排除在逻辑之外(如果使用Flux)。

请记住,低阶组件通常不需要任何状态。父组件可以简单地在不同道具中重新渲染它们。这样就不必使用bindToAuthorization了。父级不需要将授权逻辑委派给子级组件。当相关属性更改时,它只是重新渲染它。

09-17 19:43