
Pavel
23.03.2017
23:10:39


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
Это недопустимо.
Зачем вам 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]

Name
24.03.2017
04:16:00

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

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

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

Alexey
24.03.2017
06:05:51

Danil
24.03.2017
07:20:19

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

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?