@borodutcher

Страница 4895 из 10003
Никита
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
канешн не обязательно

Никита
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: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: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, но её можно запросто самому написать, так как там три строчки всего будет

switch понятней
я бы поспорил

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

lexxx
19.09.2017
11:09:45
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) { ... } });
ну ты имеешь ввиду вызывать функции по значению в переменной? такое если и юзать то только с try catch

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

Никита
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
const createReducer = (obj) => (state, action) => obj[action.type].(state, ation)
ну вот смотри я сделал твою функцию но тут еще надо проверку добавить

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

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

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

Никита
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: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 не обязательно

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

хотя я не понимаю зачем на быстродействие тут смотреть

у вас же не каждую миллисекунду будет редакс дёргаться

здесь не надо ничего оптимизировать особо

Никита
19.09.2017
11:22:06
Просто свитч кейс читабельней

И обратного я пока не увидел

Алексей
19.09.2017
11:22:41
Просто свитч кейс читабельней
ну не знаю, для меня createReducer читабельней

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 так хорош

надо попробовать

Страница 4895 из 10003