
Никита
19.09.2017
10:49:04
const mapStateToProps = (Store)=?{propsName:store...}); - это значения стора
const mapStateToProps = (State) => ({});
const mapDispatchToProps = (dispatch) => ({
actions: bindActionCreators(actions, dispatch)
});
@connect(mapStateToProps, mapDispatchToProps)
actions: import * as actions from (файл с экшенами)

Michel
19.09.2017
10:50:48

Google

Никита
19.09.2017
10:50:59
this.props.actions.doSomething() <- диспатчит твой стор

Алексей
19.09.2017
10:51:40
совершенно не обязательно пробрасывать все экшены

Никита
19.09.2017
10:51:56
канешн не обязательно

Michel
19.09.2017
10:53:04

Никита
19.09.2017
10:53:10
redux

Michel
19.09.2017
10:53:25
Ок

Алексей
19.09.2017
10:53:27
import {action1, action2, action3} from './my-awesome-actions';
const mapDispatchToProps = (dispatch) => bindActionCreators({onButtonClick: action2}, dispatch);
например
правда тогда action1, action3 не надо импортировать

Никита
19.09.2017
10:54:06
да

Michel
19.09.2017
10:54:26
Попробую, спс

Алексей
19.09.2017
10:54:46
и вызов connect как декоратора в TypeScript может привести к проблемам, так что аккуратнее
точнее может просто не скомпилироваться

Никита
19.09.2017
10:55:08
у меня есть reduxify)

Google

Никита
19.09.2017
10:55:09
в ts
import {connect} from 'react-redux';
export function reduxify(mapStateToProps: any, mapDispatchToProps?: any, mergeProps?: any, options?: any): any {
return (target: any) => (connect(mapStateToProps, mapDispatchToProps, mergeProps, options)(target) as any);
}

Michel
19.09.2017
10:55:45
Мне кажется не очень мешать Redux с ts

Никита
19.09.2017
10:55:51
@reduxify(mapStateToProps...)

Michel
19.09.2017
10:56:44
А что ещё с реактом юзаете?

Алексей
19.09.2017
10:57:36
я вообще исповедую такую философию: компоненты не должны знать о существовании редакса, то есть пропсов с именами actions, state и прочее, напоминающее о существовании редакса у меня нет

Никита
19.09.2017
10:57:42
immutable нра

Алексей
19.09.2017
10:59:29
в редаксе кстати есть очень порочная практика на мой взгляд: использование switch case в редьюсерах
учитывая то, что в JS есть более красивые методы решения подобных задач

Снобяъ
19.09.2017
11:01:13
@borodutch не читал, но может что-то по теме
https://www.theverge.com/2017/9/18/16328172/sms-two-factor-authentication-hack-password-bitcoin

Никита
19.09.2017
11:02:33

Алексей
19.09.2017
11:04:41
какие?
const MY_ACTION_1 = 'MY_ACTION_1';
const MY_ACTION_2 = 'MY_ACTION_2';
const reducer = createReducer({
[MY_ACTION_1](state, action) {
return {...state, data: action.someData};
},
[MY_ACTION_2])(state, action) { ... }
});
как то так

Никита
19.09.2017
11:05:09
switch понятней

Алексей
19.09.2017
11:05:37
createReducer - некая функция, для которой скорее всего есть какой-нибудь пакет в npm, но её можно запросто самому написать, так как там три строчки всего будет

Google

Никита
19.09.2017
11:06:28
и хрен его знает что быстрее)
const createReducer = (obj) => (state, action) => obj[action.type].(state, ation)

Алексей
19.09.2017
11:09:23
давай
switch-case - это нехорошее наследие Си, которое требует ставить всякие break в конце и прочую фигню и без скобочек {} в каждом case, что нехорошо с появлением let и const

Никита
19.09.2017
11:09:36
switch(action.type){

lexxx
19.09.2017
11:09:45

Никита
19.09.2017
11:09:46
блеать

Алексей
19.09.2017
11:10:02

Никита
19.09.2017
11:10:34
switch(action.type){
case action_type
return state.update();
default:
return state;
}
весь редусер

lexxx
19.09.2017
11:10:53
ну ты вызываешь редюсер значением просто, я правильно понял? вместо свитч кейс? как то так [action]

Алексей
19.09.2017
11:11:31
ну не знаю, давайте сойдёмся на том, что это дело вкуса

lexxx
19.09.2017
11:11:42
'riy d cvsckt
экшн в смысле

Алексей
19.09.2017
11:12:13
экшены тут причём, мы про редьюсеры говорим

Никита
19.09.2017
11:12:18

lexxx
19.09.2017
11:12:18
нет просто читал за такой подход, не совсем понял безопасно ли это, трай кетч же ты юзаешь?

Google

Никита
19.09.2017
11:12:31
а со switch case ничего не надо)

Алексей
19.09.2017
11:12:53

lexxx
19.09.2017
11:13:30
нет я просто не понял, что ты используешь вместо свитча?

Алексей
19.09.2017
11:13:43

Никита
19.09.2017
11:13:50
ну try catch не нужен надо что-то такое
const createReducer = (obj) => (state, action) => obj[action.type] ? obj[action.type].(state, aсtion) : state

lexxx
19.09.2017
11:14:31
obj[action.type] это вызов функции по значению в переменной, в случае если экшена нет, ты это как то отлавливаешь? вот что я имел ввиду

Никита
19.09.2017
11:14:45

Алексей
19.09.2017
11:15:20

lexxx
19.09.2017
11:15:27
перед твоим сообщением
ааа все, пока писал не увидел, у тебя правильно да, но в таком случае свитч кейс будет удобнее

Алексей
19.09.2017
11:15:59
только учтите, что функция createReducer пишется только один раз

Admin
ERROR: S client not available

Алексей
19.09.2017
11:18:34
и с каким угодно поведением, например можно неизвестные экшены направлять на обработчик с ключом default например, а если его нет, то применять тривиальный обработчик, что в принципе соответствует поведению switch case, но фактически писать default не обязательно

lexxx
19.09.2017
11:19:13

Алексей
19.09.2017
11:19:29
хотя я не понимаю зачем на быстродействие тут смотреть
у вас же не каждую миллисекунду будет редакс дёргаться
здесь не надо ничего оптимизировать особо

Никита
19.09.2017
11:22:06
Просто свитч кейс читабельней
И обратного я пока не увидел

Алексей
19.09.2017
11:22:41

Google

Алексей
19.09.2017
11:22:53
вопрос вкуса на самом деле

Никита
19.09.2017
11:23:01
Дело вкусп
Да

Алексей
19.09.2017
11:23:30
можно кстати без return вообще, используя стрелочные функции

Никита
19.09.2017
11:23:39
В попу

Алексей
19.09.2017
11:23:56
о
можно задавать default state отдельно

Никита
19.09.2017
11:24:27
А он и так задается
Или я не понимаю о чем ты

Михаил
19.09.2017
11:25:05
какие?
const switchcase = (cases = []) => (defaultCase = '') => key =>
key in cases ? cases[key] : defaultCase;

Алексей
19.09.2017
11:25:19
const reducer = createReducer({
[MY_ACTION]: (state, action) => ({...state, data: action.data}),
}, {
data: 'defaultData'
});

Никита
19.09.2017
11:25:32
а чем плохо
reducer(state = initialState, action){switch....}

Алексей
19.09.2017
11:26:16
отдельную константу надо заводить, хотя это вообще не критично

Никита
19.09.2017
11:26:18
зачем столько оберток ради того чтобы избавится от switch - case?
это же усложняет все

Алексей
19.09.2017
11:27:42
обёртка там одна

Никита
19.09.2017
11:27:48
и IDE путается и те кто в вашем коде разбираться будет

Алексей
19.09.2017
11:28:24
ну не знаю
может действительно switch case так хорош
надо попробовать