2016-10-14 4 views
0

Реагирующие компоненты имеют свой жизненный цикл (componentWillMount, componentDidMount и т. Д.), А также сага имеет собственный жизненный цикл (работает как промежуточное ПО).Sync redux-saga и реагировать на жизненный цикл

Есть ли способ синхронизировать эти два жизненных цикла?

Я думаю, что это может быть проблемой, когда мы хотели бы обеспечить некоторые компоненты с авторизацией (на нескольких уровнях доступа)

+0

Как правило, компоненты не должны быть «безопасными»: все они все на клиенте. Единственное, что действительно нужно защитить, это ваш API (ваш сервер), поэтому даже если пользователь каким-то образом отображает «секретный» компонент без авторизации (путем взлома его или просто из-за ошибки), ваш API не должен возвращать какие-либо данных в любом случае, поэтому он не будет отображать какую-либо значимую информацию. Имеет ли это смысл? –

ответ

0

Это возможно. Вы можете создать HOC (компонент более высокого порядка), который перехватывает события жизненного цикла React и отправляет действия, сопоставленные им для сокращения-саги. В вашей саге вы можете использовать take для синхронизации жизненного цикла и управления потоком.

Пожалуйста, дайте мне знать, если вам нужен рабочий пример. Я добавлю пример к my repository на Github.

// HOC 
import Lifecycle from '...'; 

// Target component 
class SecretPane extends Component { 
    // ... 
} 

// Export wrapped SecretPane component 
export default Lifecycle(SecretPane); 

// ... 

function* lifecycle() { 
    yield take(COMPONENT_WILL_MOUNT); 

    // Do something before mounted 

    yield take(COMPONENT_DID_MOUNT); 

    // Do something after mounted 

    yield take(COMPONENT_WILL_UNMOUNT); 

    // Do something before unmounted 
}