@react_js

Страница 1476 из 5115
George
16.06.2017
14:59:40
ну да.. канеш, данные записываются в стейт

общего стора

andretshurotshka?❄️кде
16.06.2017
14:59:55
чет я не въезжаю

George
16.06.2017
14:59:59
резолвить можно наверху

Google
George
16.06.2017
15:00:03
во вьюхе даже

Кирилл
16.06.2017
15:00:12
резолвить можно наверху
покажи пример редьюсера

George
16.06.2017
15:00:21
эм, ща

Mikhail
16.06.2017
15:01:06
Подскажите, а как так выходит, что из-за вебака я могу сослаться в window через перменную global?

George
16.06.2017
15:01:20
import {assign, every, filter, findIndex, some} from 'lodash'; import { State } from '../../../models/AppState'; import GameActions from '../actions'; import coordsInArray from '../../../utils/coordsInArray'; const initialState: State = { "hits": [], "misses": [], "layout": [], "shipTypes": {} }; // Reducer /** * Another clever approach of writing reducers: * * export default function(state = initialState, action) { * const actions = { * [ACTION_TYPE]: () => [action.payload.data, ...state] * }; * * return (_.isFunction(actions[action.type])) ? actions[action.type]() : state * } */ export default function reducer(state: State = initialState, action: any = {}): State { switch (action.type) { case GameActions.GET_LAYOUT: return assign({}, state, action.payload); break; case GameActions.SHOOT_CELL: { let { hits, misses, layout } = state; const coords = [action.x, action.y]; const hasCollision = some(layout, ship => { const isHit = coordsInArray(ship.positions, coords); if (isHit) { // mutations of hits console.warn('Hit', ship); hits = state.hits.concat([coords]); if (every(ship.positions, coord => coordsInArray(hits, coord))) { // sanked ship alert console.warn('Sinked', ship); } } return isHit; } ); if (!hasCollision) { console.error('Missed'); misses = state.misses.concat([coords]); } return { ...state, hits, misses, } } default: return state; } }

Oleg ?
16.06.2017
15:01:37
А есть примеры использования JSS в продакшен коде?

George
16.06.2017
15:02:57
return assign({}, state, action.payload); ну тут изи.. сначала payload в экшене - это function, затем он превращается в данные при ответе с сервера

Eugeniy
16.06.2017
15:03:18
У вас там break после return стоит)

Pavel
16.06.2017
15:03:20
А как быть, если мне надо действия складывать в цепочки? Например два действия застрелитьВасю и спрятатьТруп я всегда использую друг за другом. Делать общее действие убитьВасю и внутри него делать два dispatch?

Eugeniy
16.06.2017
15:03:26
н - не нужен

Кирилл
16.06.2017
15:03:39
Pavel
16.06.2017
15:03:43
в сервисе
Можно пример?

Google
Кирилл
16.06.2017
15:04:01
там миддл какой то резхолвит чтоль??

George
16.06.2017
15:04:06
да

redux-promise

Кирилл
16.06.2017
15:04:14
а ну так с этого надо начинать было

George
16.06.2017
15:04:37
насчет примера сценария гляну

не уверен что в этом проекте есть (

просто в основной с сагой и рефлаксом было

Pavel
16.06.2017
15:05:24
George
16.06.2017
15:05:38
не, сага это ооочень крутая вещь

Pavel
16.06.2017
15:05:59
ох

ещё одну либу ставить)

Кирилл
16.06.2017
15:06:08
хзхз в сагах бойлерплейта куча

Eugeniy
16.06.2017
15:06:31
Кирилл
16.06.2017
15:06:32
единственный плюс это пощупать генераторы

George
16.06.2017
15:07:18
нет, единственный плюс что вы можете оркестрировать сценарии по-правильному

а в генераторах нет ничо такого вау

Кирилл
16.06.2017
15:07:38
по-правильному?

George
16.06.2017
15:07:45
могу примерчик как раз на саге скинуть

Кирилл
16.06.2017
15:08:04
желательно поменьше чем предыдущий

George
16.06.2017
15:08:22
да конечно

Google
George
16.06.2017
15:08:24
ток кусочек

чтоб понимать

Кирилл
16.06.2017
15:08:39
в нетерпении

George
16.06.2017
15:09:01
function * saveCashReceipt ({ payload }) { try { const resp = yield call(AppService.getConfirmationMethod, payload); yield put({ type: `${AppActions.GET_CONFIRMATION_METHOD}_OK`, confirmationMethod: resp }); if (resp === 'URM') { console.log('URM detected'); yield put({ type: `${AppActions.SHOW_CONFIRMATION}` }); const { urm, cashier } = yield race({ urm: take(AppActions.CONFIRM_URM), cashier: take(AppActions.CONFIRM_CASHIER) }); yield put({ type: `${AppActions.HIDE_CONFIRMATION}` }); let mode; if (urm) { mode = 'URM'; } else if (cashier) { mode = 'CASHBOX'; } try { const resp = yield call(AppService.saveCashReceipt, mode, payload); yield put({ type: `${AppActions.SAVE_CASH_RECEIPT}_OK`, cashReceipt: resp }); } catch (err) { yield put({ type: `${AppActions.SAVE_CASH_RECEIPT}_ERR`, err }); } } else { console.log('Other detected'); } } catch (err) { yield put({ type: `${AppActions.GET_CONFIRMATION_METHOD}_ERR`, err }); } }

вот тут происходит сразу появление модалки, и обработка действий с нее, и 2 запроса ajax

все это помещается в несколько строк кода... и выглядит очень прозрачно

Кирилл
16.06.2017
15:10:30
очень прозрачно... особенно если не знать что такое call put race

да и в чем тут преимущество конкретно саг?

зачем тут интерполяция?) ${AppActions.HIDE_CONFIRMATION}

George
16.06.2017
15:11:24
то что она следит за приложением, своего сервис запущенный ... своего рода редьюсер для действий

andretshurotshka?❄️кде
16.06.2017
15:11:54
зачем нужна сага если есть async/await и redux-thunk

Кирилл
16.06.2017
15:12:39
то что она следит за приложением, своего сервис запущенный ... своего рода редьюсер для действий
это по сути обычный мидл, который ловит определенные экшны, то есть она не запустится без диспатча входного экшна

George
16.06.2017
15:12:40
в том и дело, что тут комбайн из действий происходит, а там куча всего лишнего. Плюс она бонусом дает решать несколько задач типа с потоками событий

ну вы почитайте, тут очень долго объяснять

George
16.06.2017
15:13:39
есть задачи где надо мониторить не одно действие, а потоки действий

и делать какие-либо с ними операции...

Google
George
16.06.2017
15:14:27
например закликивание чего-либо.. либо отлов первого загруженного сценария

не лучше ли тогда rx взять?
ну вот это вместо rx с генераторами

Кирилл
16.06.2017
15:15:10
например закликивание чего-либо.. либо отлов первого загруженного сценария
while(true)? это прикольная штука, но в жизни, мне, например, ни разу не пригодилось

Дмитрий
16.06.2017
15:15:12
А как быть, если мне надо действия складывать в цепочки? Например два действия застрелитьВасю и спрятатьТруп я всегда использую друг за другом. Делать общее действие убитьВасю и внутри него делать два dispatch?
Я возможно скажу щас неожиданное, но тебе не нужны два отдельных действия как класс. У тебя всего одно действие — устранитьПроблему, а как это будут делать исполнители тебе вообще по барабану

George
16.06.2017
15:15:30
оч, особенно когда оно делается в форке

Дмитрий
16.06.2017
15:15:45
То есть, достаточно ОДНОГО экшна и одного thunk с двумя асинхронными действиями подряд

Кирилл
16.06.2017
15:16:02
оч, особенно когда оно делается в форке
ах да форки спавны... усложнение, после которого хрен что поймешь

Дмитрий
16.06.2017
15:16:26
А то начинают городить из простого вызова функции какой-то цирк с экшнами и, я извиняюсь, "сагами"

George
16.06.2017
15:16:30
ну блин, я не предлагаю мне верить ) я предлагаю поюзать, потом сказать что это сложно )

ты выносишь логику как раз из экшен криэторов

Admin
ERROR: S client not available

Кирилл
16.06.2017
15:16:50
George
16.06.2017
15:17:10
и твои экшен криэторы становятся настоящими экшен криэторами, которые нужны только для того чтобы через функцию вызывать экшен

Сергей
16.06.2017
15:17:21
прикольный тред))

Дмитрий
16.06.2017
15:17:26
ты выносишь логику как раз из экшен криэторов
ты не выносишь логику, ты размазываешь экшн-криэйтор по неопределенной массе бойлейплейта

George
16.06.2017
15:17:27
а сага - это сценарий манипуляции с данными - все в одном месте )

Dreamerinnoise
16.06.2017
15:17:29
лучше Mobx взять?

чем эти саги

Сергей
16.06.2017
15:17:39
Google
George
16.06.2017
15:17:43
лучше Mobx взять?
ой фсе, это я тоже юзал )

andretshurotshka?❄️кде
16.06.2017
15:17:46
лучше cyclejs

Дмитрий
16.06.2017
15:17:52
purescript

andretshurotshka?❄️кде
16.06.2017
15:18:00
Сергей
16.06.2017
15:18:01
Delphi!

George
16.06.2017
15:18:06
Дмитрий
16.06.2017
15:18:21
Dreamerinnoise
16.06.2017
15:18:30
ой фсе, это я тоже юзал )
и что? не понравилась сладкая магия?

Дмитрий
16.06.2017
15:18:31
но для того, чтобы это сделать сага ваще не нужна

George
16.06.2017
15:18:37
ессесн

чо там только observable

и больше знать ни хуя не надо )

Кирилл
16.06.2017
15:19:09
и что? не понравилась сладкая магия?
redux-act там нельзя привязать в редьюсере 1 обработчик к нескольким экшнам (((

ой не тому ответил

Дмитрий
16.06.2017
15:19:28
Лол

Смешно)

andretshurotshka?❄️кде
16.06.2017
15:19:51
[ACTION]: funcName, [ACTION2]: funcName

Дмитрий
16.06.2017
15:20:17
А можно пример простенький?
async (dispatch) => { await killVyasya() await hideBody() dispatch(SHEF_VSYO_GOTOVO()) }

Дмитрий
16.06.2017
15:20:40
sort of

Страница 1476 из 5115