2017-02-08 2 views
3

У меня есть Реагировать компонент Сообщение:Метеор Реагировать Komposer: Выполнение компонентов Конструктора ПОСЛЕ готовой подписки

export class Post extends React.Component { 
    constructor(props) { 
    this.state = this.props; 
    } 
    ... 
} 

, которые я сочиняю с

import { composeWithTracker } from 'react-komposer'; 

импорта {composeWithTracker} от «среагировать-komposer «; import Post from '../components/post.jsx';

function composer(props, onData) { 
    const subscription = Meteor.subscribe('post', props.postId); 

    if (subscription.ready()) { 
    const data = { 
     ready: true, 
     posts: Posts.findOne(props.postId).fetch() 
    } 
    onData(null, data); 
    } else { 
    onData(null, {ready: false}); 
    } 
} 

export default composeWithTracker(composer)(Post); 

. Как указано в Компонент сообщения Я хочу поместить некоторые свойства в состояние компонента, но конструктор будет выполнен, прежде чем я получу данные от композитора!

Как подождать, пока данные будут отправлены, а затем поместите мой props в state?

Разве это не то, что React Kompose должен делать? BTW Я использую Версия 1.~, чтобы получить composeWithTracker.

ответ

4

Вы можете использовать componentWillReceiveProps для получения новых свойств и установки в качестве состояния компонента. Эта функция будет выполняться всякий раз, когда к компоненту передаются новые свойства:

export class Post extends React.Component { 
    // ... 
    componentWillReceiveProps(nextProps) { 
    this.setState({ 
     ...nextProps, 
    }); 
    } 
    // ... 
} 
+0

Это именно то, что я искал! – Knowledge