@react_js

Страница 1119 из 5115
Rustem
23.03.2017
23:12:31
createStore => export const AUTH_USER = 'AUTH_USER'; export function authuser(login, password) { const RightLogin = 'login'; const RightPassword = 'password'; let error = ''; if ((login !== RightLogin) && (password !== RightPassword)) { error = 'Логин или пароль введены неверно'; return { type: AUTH_USER, login, password, error }; } else { return { type: AUTH_USER, login, password, error }; } } reducer => import { AUTH_USER } from './actions'; const initialState = { authuser: [ { login: '', password: '', name: '' } ], error: '' }; function homeReducer(state = initialState, action) { switch (action.type) { case AUTH_USER: let authUser = state.authuser; if (!action.error) { let login = action.login; authUser.push({name: login}); } return Object.assign({}, state, { error: action.error, name: name }); default: return state; } } const HomeReducer = { home: homeReducer }; export default HomeReducer;

Нужно вытащить поле name

Pavel
23.03.2017
23:13:05
createStore

Google
Pavel
23.03.2017
23:13:09
Покажите

Rustem
23.03.2017
23:13:46
import { createStore, applyMiddleware, compose } from 'redux'; import rootReducer from './reducers'; import { DevTools } from './utils/index'; function _applyMiddleware() { const middleware = [ ]; return applyMiddleware(...middleware); } export default function configureStore(initialState) { const store = compose( _applyMiddleware(), DevTools.instrument() )(createStore)(rootReducer, initialState); return store; }

Pavel
23.03.2017
23:14:21
Ок, теперь ./reducers

Rustem
23.03.2017
23:14:38
import { combineReducers } from 'redux'; import { routerReducer } from 'react-router-redux'; import { HomeReducer } from './pages/home/index'; export default combineReducers({ routing: routerReducer, ...HomeReducer });

Pavel
23.03.2017
23:15:02
Ок. Минуту.

export default connect( state => ({ authUser: state.home.authUser }) )(YourComponent)

В this.props.authUser то что вам нужно

Rustem
23.03.2017
23:17:28
Благодарю, сейчас попробую)

Pavel
23.03.2017
23:23:23
Благодарю, сейчас попробую)
И у вас происходит мутация state при обработке AUTH_USER.

Это недопустимо.

Зачем вам authUser в виде Array. Вы предполагаете, что у вас будет несколько авторизованных пользователей?

Rustem
23.03.2017
23:28:48
Нет

1

Google
Pavel
23.03.2017
23:30:10
Тогда нужно переделывать reducer

Давайте чтобы нам было проще поработаем в webpackbin

https://www.webpackbin.com/bins/-Kf8UG5GPgK5B00LELun

Включаю live режим

Примерно так

Rustem
23.03.2017
23:34:34
Как по вкладкам переключаться?

Pavel
23.03.2017
23:35:09
Так же рекомендую actionCreator делать FSA совместимым.

Чтобы кроме type и payload внутри ничего не было.

Rustem
23.03.2017
23:35:27
Отлично, вижу

Pavel
23.03.2017
23:35:30
По вкладкам, я должен выключить Live.

Так же думаю initialState еще сократить.

Да, думаю так лучше.

Зачем вам login, если вы его переименовываете в name?

Может все же login оставить?

Rustem
23.03.2017
23:38:28
Незачем)

Pavel
23.03.2017
23:38:37
Ок, исправил.

Все сильно упростилось, как видите.

Rustem
23.03.2017
23:39:18
Я новенький в реакте, не со всем ещё разобрался как что работает

Pavel
23.03.2017
23:39:31
Чтобы сделать FSA complaint, смотрите что нужно сделать.

И это не react. Это ES6 + redux

Google
Dmitry
23.03.2017
23:41:25
мелочевый вопрос, но все же, зачем было action.type выносить в отдельную переменную

не проще ли switch (action.type) ?

Pavel
23.03.2017
23:44:26
Люблю декомпозицию

export const authuser = (login, password) => { return { type: AUTH_USER, login, password, error: (login !== TEST_LOGIN && password !== TEST_PASSWORD) && ERROR_AUTH || null } }

Все, пользуйтесь.

Rustem
23.03.2017
23:45:58
Спасибо ?

Pavel
23.03.2017
23:46:39
Вам нужно немного переделать композицию reducer-ов, но думаю справитесь

Dmitry
23.03.2017
23:46:51
а что означает payload в createStore.js ?

Rustem
23.03.2017
23:47:14
Стандарт какойй-то)

Pavel
23.03.2017
23:47:17
В createStore нет payload

Rustem
23.03.2017
23:47:21
type и payload в JSON ответе

Dmitry
23.03.2017
23:47:54
export default (payload) => { хм

Pavel
23.03.2017
23:47:55
Можете почитать здесь: https://github.com/acdlite/flux-standard-action

Evjeni
23.03.2017
23:48:07
what?

Dmitry
23.03.2017
23:49:10
понял, спасибо, почитаю. Просто сразу стал использовать redux, миновав flux

Pavel
23.03.2017
23:49:42
Я тоже, но этот стандартом перетекло в redux.

Dmitry
23.03.2017
23:52:48
redux-fsa, redux-thunk-fsa... *прикинулся шлангом* доп. фабрики и валидаторы, я лучше просто "буду в курсе" %)

Pavel
23.03.2017
23:56:59
))

Igor
24.03.2017
03:08:13
Народ, привет! Можно ли так state модифицировать? Не нарушает ли это правил редукса? case ACTION_DEL_EXERCISE: state.sets .map(item => { item.exercises = item.exercises.filter(exercise => exercise.id != action.payload) }) return {...state, sets: state.sets}

Владислав
24.03.2017
03:20:17
и у тебя это работает?)

Google
Admin
ERROR: S client not available

Igor
24.03.2017
03:20:40
Ага)

Владислав
24.03.2017
03:22:51
state.sets не должен был измениться



Igor
24.03.2017
03:25:01
Один момент, проверю...

Интересное явление, проверил state, он не меняется, но при этом на странице элемент пропадает.

Владислав
24.03.2017
03:28:53
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/map

state.sets = state.sets.map...

Igor
24.03.2017
03:34:07
Осталось понять почему элемент пропадает со страницы)

В общем. Этот вариант работает (во всяком случае под google chrome) state изменяется. Смотрю в консоль и вижу, что у меня по итогу prev state == next state Делаю вывод, что нельзя делать так. state.sets .map(item => { item.exercises = item.exercises.filter(exercise => { console.log([exercise.id, action.payload]) return exercise.id != action.payload }) })

Спасибо.

Если еще кто сможет объяснить почему это работает, будет здорово: state = { sets: [{ ex: [ {id: 1}, {id: 2} ] }] }; state.sets.map(a => { a.ex = a.ex.filter(ex => ex.id != 1) }); state.sets[0]



Oleg
24.03.2017
04:17:20
Всем привет!

Danil
24.03.2017
05:12:05
Как в пост запросе отправить объект загруженной картинки

Oleg
24.03.2017
05:16:23
я не знаю

Danil
24.03.2017
07:20:19
Поищи formdata
СПС, с помощью formdata сделал

Aleksey
24.03.2017
07:38:42
Что лучше юзать для форм? react-bootstrap подключать?

Google
MadMax
24.03.2017
07:39:07
react-form?

Aleksey
24.03.2017
07:39:46
react-form?
о как, ладно, гляну. Спасибо

Pavel
24.03.2017
07:53:32
парни, как очистить store в redux?

Filip
24.03.2017
07:54:06
сделать специальный экшн RESET_STATE

и возвращать в главном редюсере инишиал стейт

на него

Pavel
24.03.2017
07:55:58
От души братишка!

Razzwan
24.03.2017
08:10:51
Кто-то знает, как элегантно вставить mock данные при использовании redux-axios-middleware?

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