Комментарии 6
SSR использую в полный рост, только не понял, к чему этот уточняющий вопрос — assignAll не работает на сервере?
Я отказался совсем от биндинга экшенов, не использую mapDispatchToProps, наоборот предпочитаю явно дергать dispatch(), но в результате боевой код имеет много лишнего:
interface IOwnProps {}
interface IConnectedState {
router: RouterState;
}
interface IConnectedDispatch {
dispatch: Dispatch<IStoreState>;
}
type IProps = IOwnProps & IConnectedState & IConnectedDispatch;
interface IState {}
const mapStateToProps = (state: IStoreState) => ({
router: state.router,
});
const WrappedUser = connect<IConnectedState, IConnectedDispatch, IOwnProps>(mapStateToProps)(
class User extends React.Component<IProps, IState> {
componentDidMount() {
this.props.dispatch(myAction())
}
//...
}
)
export default WrappedUser;
Спасибо, записал в блокнотик "подумать, как спрятать dispatch". Только оно должно работать с redux-thunk и redux-saga.
0
assignAll (и bindAll) не работает с SSR, да.
Если использовать либу, что я указал выше, thunk не нужен :)
C сагами не подскажу, но зачем они, если уже есть redux-act?
Если использовать либу, что я указал выше, thunk не нужен :)
C сагами не подскажу, но зачем они, если уже есть redux-act?
+1
Люди, остановитесь! Зачем вы пишете столько запутанного кода, называя его "легко тестируемым"? Вы где-то потеряли простоту и элегантность яваскрипта. Смотрите, весь код из статьи можно было бы переписать так:
Код неблокирующей загрузки данных в зависимости от адресной строки:
export class $my_app extends $mol_view {
post_id() {
return $mol_state_arg.sub().value()
}
post() {
return $mol_http.resource( `/posts/${ this.post_id() }` ).json()
}
comments() {
return $mol_http.resource( `/comments?postId=${ this.post_id() }` ).json()
}
}
Ну и тест на это дело:
$mol_test({
'Load post and comments'() {
const app = new $my_app
const arg = $mol_state_arg.sub()
const post = $mol_http.resource( `/posts/1` )
const comments = $mol_http.resource( `/comments?postId=1` )
try {
arg.value = ()=> '1'
post.json = ()=> ({
userId: 1,
id: 1,
title: 'title',
body: 'body',
})
comments.json = ()=> ([
{
postId: 1,
id: 1,
name: 'name',
email: 'email@example.com',
body: 'body',
},
])
$mol_assert_like( app.post() , comments.post() )
$mol_assert_like( app.comments() , comments.json() )
} finally {
delete arg.value
delete post.json
delete comments.json
}
}
})
Хотя смысла тестировать столь простую логику я не вижу.
-1
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Тестирование redux