2015-05-23 4 views
1

Я пытаюсь получить доступ к функции, определенной в mixin от getDefaultProps, но я получаю undefined is not a function. В основном я использую react-intl, и метка по умолчанию для моей колонки должна быть переведена. Почему я не могу получить доступ к функциям, определенным в mixin из getDefaultProps?Реакт: не удается получить доступ к функции mixin внутри getDefaultProps

var React = require('react'); 
var ReactIntl = require('react-intl'); 
var IntlMixin = ReactIntl.IntlMixin; 

var Index = React.createClass({ 

    mixins: [IntlMixin], 

    getDefaultProps: function() { 
    return ({ 
     options: { 
     attributes: [{name: 'name', label: this.getIntlMessage('Index.name'), index: 0}], 
     view: "tiles" 
     } 
    }); 
    }, 

    render: function() { 
    return <div>{this.props.options.attributes[0].label}</div> 
    } 
}); 

module.exports = Index; 

ответ

7

Он не доступен, так как getDefaultProps просто вызывается один раз, а не в контексте экземпляра класса, который вы создаете. Контекст this неверен.

Вам нужно переместить поиск в функцию экземпляра, например render.

Вы также должны знать, что экземпляр массива или объекта, возвращаемый в getDefaultProps, является общим для всех экземпляров. Я не знаю, как вы его используете, но это может вызвать проблему в зависимости от того, как вы используете значения.

+0

Спасибо за ответ, я понимаю ваши вопросы, но я чувствую, что было бы неплохо иметь доступ к контексту из getDefaultProps. Возможно, я недостаточно понимаю Реакт. :) –

+0

Не знаете, почему нижний предел, этот ответ правильный, вы не можете получить доступ к контексту экземпляра из 'getDefaultProps', потому что нет экземпляра. В документах: «Вызывается один раз и кэшируется при создании класса» –

+0

@AlanSouza - вы не можете получить к нему доступ ... это не так, поскольку нет класса. Вам нужно будет использовать функциональность по-другому, а не полагаться на метод mixin. – WiredPrairie

Смежные вопросы