@react_js

Страница 1044 из 5115
Ҫѐҏӗѫӑ
10.03.2017
01:50:13
нет

Paul
10.03.2017
01:52:51
Забавно))

Max
10.03.2017
04:59:38
камрады, а есть какой вменяемый дейтпикер?
Я вчера просто прикрутил bootstrap-datepicker

MadMax
10.03.2017
05:20:52
Доброго времени суток, уважаемые. У меня проблема с принятием state из редусера. Дело в том, что я отслеживаю 3 шага. Отработал ли ГетПродукт из апи, отработал ли диспач с этими данными и отработал ли редусер с этими данными

Google
MadMax
10.03.2017
05:21:03


У меня весь этот объект попадает в state



Но в компоненте его не существует!



Почему так, госпада??

Dmitry ?
10.03.2017
05:30:40
Ну ты код, код кидай

Danil
10.03.2017
05:41:45
А в react-router v4 IndexRoute нету?

MadMax
10.03.2017
05:42:31
Ну ты код, код кидай
А код чего именно скинуть? Весь же сюда не поместится(

Я б с удовольствием вас бы ознокомил с кодом

Dmitry ?
10.03.2017
05:45:08
Покажи как мапишь стейт из редьюсера в компонент

MadMax
10.03.2017
05:45:42
componentWillMount(){ const { dispatch } = this.props; dispatch(getProductsIfNeed()); } render(){ console.log(this.props.product) return( <div> </div> ) } } function select(state){ return { product : state.product } } export default connect(select)(Phones);

А мапить нечего, он undefined говорит, потому что именно в компоненте пустой пейлоад

Google
Dmitry ?
10.03.2017
05:48:20
Покажи редьюсер

MadMax
10.03.2017
05:48:50
function productFetch(state=initState, action){ switch (action.type) { case 'FETCH_PRODUCT_SUCCESS': console.log('reducer', action.payload) return Object.assign({}, state, { payload: action.payload, isFetching: false, errorMessage: '' }); case 'FETCH_PRODUCT_ERROR': console.log('reducer', action.payload) return Object.assign({}, state, { errorMessage: action.errorMessage }); default: return state; } }

Вот точка входа export default function product(state = initState, action) { switch (action.type) { case "PRODUCT_FETCH_START": case "FETCH_PRODUCT_SUCCESS": case "FETCH_PRODUCT_ERROR": console.log('reducer', action.payload) return productFetch(state, action); default: return state; } }

Dmitry ?
10.03.2017
05:55:27
У тебя в компоненте dispatch из props не пойму откуда возьмется

Ты же в connect его не передал

MadMax
10.03.2017
05:59:48
из экшена диспатч берется

export function getProductsIfNeed (){ return dispatch => { dispatch(getProdStart()); getProductList(json => { console.log('Отработал Гетпродукт', json.data) return dispatch(successCallback(json)); } ); } }

import { getProductsIfNeed } from '../actions/product'; в компоненте

Dmitry ?
10.03.2017
06:01:04
Я про код в componentWillMount, ты достаешь dispatch из this.props

Andrey
10.03.2017
06:06:19
я б не стал морочиться с наследованиями и заюзал бы константы и обычные функции в одном файле. потом можно будет разрезать на разные файлы и экспортить их из индекс.жс

но это я — убеждённый противник паразитных наследований в жс

Dmitry ?
10.03.2017
06:09:37
anoru
10.03.2017
06:11:23
Нет, не фигню, я тоже не вижу никаких коннектов

Поэтому и надо скидывать весь код на gist, а не кусочки

Dmitry ?
10.03.2017
06:12:00
Есть connect там ниже export default connect(select)(Phones)

anoru
10.03.2017
06:12:25
аа, лол. Пропустил

Dmitry ?
10.03.2017
06:13:25
MadMax покажи successCallback action

MadMax
10.03.2017
06:13:49
export function successCallback(payload) { console.log('dispatch', payload.data) return { type: 'FETCH_PRODUCT_SUCCESS', payload: payload.data }; }

anoru
10.03.2017
06:15:20
А теперь getProductList

Dmitry ?
10.03.2017
06:15:55
В payload.data все ок, судя по этому скрину

Google
MadMax
10.03.2017
06:16:01
Ребята. Он в компонент приходит. Сначала пустой, потом отрабатывают все эти действия, которые законсоленные. Отрабатывает getproduct из апи, потом Диспач отрабатывает. потом редьюсер отрабатывает, ре-рендится, в консоль вновь приходит уже ПОЛНЫЙ объект, но я к нему не могу обратится почему то, только к пустому

function getProductList(successCallback, errorCallback){ axios.get('http://localhost:3001/api/product').then(response =>{ if(response){ successCallback(response); }else{ errorCallback(err); } }) }

сейчас вывел его в консоль

render(){ const { payload } = this.props.product; console.log('modules', payload.modules) return(

Dmitry ?
10.03.2017
06:17:49
Эм

В чем проблема тогда?

anoru
10.03.2017
06:18:07
:D

MadMax
10.03.2017
06:18:11
Это массив объектов, верно?

если я обращусь к нему по индексу, в ручную? Должен законсолится первый объект?

const { payload } = this.props.product; console.log('modules', payload.modules[0])



Dmitry ?
10.03.2017
06:19:23
Наверняка это на этапе, где у тебя еще нет данных

anoru
10.03.2017
06:19:27
Потому что в тот момент его еще нету

проверка нужна

MadMax
10.03.2017
06:19:57
Какая првоерка? На что?

Я делал Array.isArray

Dmitry ?
10.03.2017
06:20:10
У тебя render отрабатывает несколько раз

anoru
10.03.2017
06:20:16
на существование payload и payload.modules

MadMax
10.03.2017
06:20:29
в сам if рендер поместить?

Dmitry ?
10.03.2017
06:20:35
Да

Google
anoru
10.03.2017
06:20:45
payload.modules && payload.modules.map(item =>

но перед этим надо Payload проверить еще выше

и поставить ему дефолтный {} может быть

const { payload = {} } = this.props.product;

Dmitry ?
10.03.2017
06:21:32
if (payload && payload.modules && payload.modules.length) console

Грубо говоря

Admin
ERROR: S client not available

anoru
10.03.2017
06:21:55
он про рендер

то есть про return я так понимаю

MadMax
10.03.2017
06:26:17
Странно

anoru
10.03.2017
06:26:52
что именно?

Artem
10.03.2017
06:27:23
if (payload && payload.modules && payload.modules.length) console
не лучше ли через lodash проверить ?)

_.isEmpty()

Dmitry ?
10.03.2017
06:27:50
Я просто пытался объяснить проблему

anoru
10.03.2017
06:27:53
payload в данном случае выглядит странно. Должно быть просто products.list

и можно его получить еще на этапе селектора

MadMax
10.03.2017
06:28:06
if (payload && payload.modules && payload.modules.length) console
Если выполняю такую првоерку, то выходит длина массива. Стоит мне поместить return в if под консоль вывод. То ругается консолька на

Uncaught Error: Phones.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object. at invariant (invariant.js:39)

anoru
10.03.2017
06:28:25
я тебе выше написал как надо сделать

payload.modules && payload.modules.map(item =>

Google
anoru
10.03.2017
06:29:06
const { payload = {} } = this.props.product;

MadMax
10.03.2017
06:29:44
render(){ const { payload = {} } = this.props.product; if (payload && payload.modules && payload.modules.length){ console.log(payload.modules[0].address_id) return( <div> </div> ) }

anoru
10.03.2017
06:30:13
это разве похоже на то, что я написал?

ты вот специально игнорируешь правильные ответы

Dmitry ?
10.03.2017
06:30:26
Ну и напиши еще ветку кода, где modules нет

MadMax
10.03.2017
06:30:27
Не игнорирую.

Dmitry ?
10.03.2017
06:30:39
else там, что-то еще

Но выше предложили лучше варианты, этот самый явный для демонстрации

MadMax
10.03.2017
06:32:15
В map функцию я указал ретурн

render(){ const { payload = {} } = this.props.product; payload.modules && payload.modules.map(item => { return( <div> </div> ) }) } верно ли я Вас понял?

Dmitry ?
10.03.2017
06:32:54
Нет

anoru
10.03.2017
06:33:18
оберни все в <div>

<div> { payload.modules ..... </div>

и это внутри return

Dmitry ?
10.03.2017
06:35:00
render(){ const { payload = {} } = this.props.product; return ( <div> {payload.modules && payload.modules.map(item => { return( <div> {item.address_id} </div> ) })} </div> ); }

Artem
10.03.2017
06:36:12
render(){ const { payload = {} } = this.props.product; return( <div> payload.modules && payload.modules.map(item => { // тут какой то html код } </div> ) }) }

MadMax
10.03.2017
06:36:33
ДАаааааааа

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