首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以定义一个可以在React组件中覆盖的ReactJS Mixin方法?

是否可以定义一个可以在React组件中覆盖的ReactJS Mixin方法?
EN

Stack Overflow用户
提问于 2014-06-02 05:53:37
回答 5查看 9.4K关注 0票数 17

Facebook的ReactJS库对which component methods can be overridden and how有严格的规定。除非它是specifically allowed,否则我们不能重新定义方法。

对于我的自定义混入,如果我有一个我想要重写的方法,我该如何更新SpecPolicy呢?这有可能吗?

这个例子有点做作,但它应该能让人明白这一点。假设我有下面的mixin,它试图提供一个默认的renderItem方法,如果需要的话,它将被覆盖。当我试图呈现组件<Hello ... />时,我得到了一个Invariant Violation错误。你可以找到a jsfiddle here

代码语言:javascript
复制
var MyMixin = {
    render: function () {
        return this.renderItem();
    },
    renderItem: function () {
        return <div>Hello {this.props.name}</div>;
    }
};

var Hello = React.createClass({
    mixins: [MyMixin],
    renderItem: function() {
        return <div>Hey {this.props.name}</div>;
    }
});
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-02 06:22:14

现在这是不可能的。React的未来版本很可能会有利用ES6类的mixins,并且会更加灵活。请参阅此处以获取建议:

https://github.com/reactjs/react-future/blob/master/01%20-%20Core/02%20-%20Mixins.js

票数 15
EN

Stack Overflow用户

发布于 2014-07-11 08:50:55

你可以只使用像jQuery extend这样的东西来扩展传递给React.createClass的对象,而不是使用mixin -这将允许你在需要的时候仍然使用mixin,并在需要的时候使用这个方法(JS Fiddle):

代码语言:javascript
复制
/** @jsx React.DOM */

var MyMixin = {
    render: function () {
        return this.renderItem();
    },
    renderItem: function () {
        return <div>Hello {this.props.name}</div>;
    }
};

var Hello = React.createClass($.extend(MyMixin, {
    renderItem: function() {
        return <div>Hey {this.props.name}</div>;
    }
}));

React.renderComponent(<Hello name="World" />, document.body);
票数 8
EN

Stack Overflow用户

发布于 2015-05-11 10:13:25

如果你仍然想要一个默认的rednerItem实现,也许你可以这样做:

代码语言:javascript
复制
var MyMixin = {
  render: function () {
    return this.renderItem();
  },
  renderItem: function () {
    var customRender = this.customRenderItem;
    return customRender != undefined ? customRender() : <div>Hello {this.props.name}</div>;
  }
};

var Hello = React.createClass({
    mixins: [MyMixin],
    customRenderItem: function() {
      return <div>Hey {this.props.name}</div>;
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23984887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档