skoder
@skoder
web программист

Как в react+redux организовать многопанельное приложение?

Здравствуйте
Пробую писать на React+Redux мобильное приложение. Если упростить то выглядит так
<Slides>
    <Slide>
        <OrderForm>
              <Button>настроить параметр 1</Button>
              <Button>настроить параметр 2</Button>
        </OrderForm>
    </Slide>
</Slides>

При нажатии кнопки Заказать, открывается отдельная страница(по факту просто слайд сверху),
<Slides>
    <Slide>
        <OrderForm>
              <Button>настроить параметр 1</Button>
              <Button>настроить параметр 2</Button>
        </OrderForm>
    </Slide>
    <Slide>
        <OrderDetail1>
              <input/>
        </OrderDetail1>
    </Slide>
    <Slide>
        <OrderDetail2>
              <input/>
        </OrderDetail2>
    </Slide>
</Slides>

Я не придумал ничего лучше, как сделать action
export const addSlide = (content) => {
  return {
     type: 'ADD_SLIDE',
     payload: content
  }
}

Повесить его на Button.onClick, а в редуторе Slides просто добавлять новый слайд с таким содержимым.
Как-то так
<Button onClick={() => {
this.props.addSlide(<OrderDetail1 {...somedata}/>)
}}>настроить параметр 1</Button>

Проблема в том, что такая запись не перерендерится при изменении данных в редуктораях у OrderDetail
Как быть?
Раньше я делал в компоненте Slides обруботку текущего значения через константы
Типа того
let slides = this.props.slides.map((slide, index) => {
  let content;  
  switch (slide.type) {
        case 'order_detail1': 
           content = <OrderDetail1/>
       break;
      ....
   }
   return <Slide>{content}</Slide>
})

...
<Slides>{slides}</Slides>

Но это очень неудобно поддерживать, и код в компоненте Slides был слишком большой.
Подскажите пожалуйста, может у меня в корне не верный подход. Сейчас думаю рендерить компонент в какой-то невидимый div и передавать ссылку на него.

UPD. По ТЗ все слайды должны быть видны, т.е. одновременно рендерятся и форма и детали заказа. По дизайну так, один слайд закрывает другй но при этом часть первого видно сбоку
  • Вопрос задан
  • 392 просмотра
Пригласить эксперта
Ответы на вопрос 2
@abberati
frontend-разработчик
Всё верно, у вас в корне неверный подход. Специально для этого используется react-router.
Ответ написан
skoder
@skoder Автор вопроса
web программист
В общем ошибка была в понимании работы React + Redux, а в частности что
let order = <Orderdetail/>
не есть момент рендера этого Orderdetail, и перерисоваться он должен сам в своем компоненте. это можно сделать привязав к нему собственный редуктор, который отреагирует на изменения и вызовет перерисовку.
Это не решение, сама постановка вопроса не верная. Все там работает, если правильно настроить редуктор тех компонентов, которые вызваны в addSlide
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
02 нояб. 2024, в 21:08
2000000 руб./за проект
02 нояб. 2024, в 20:34
40000 руб./за проект
02 нояб. 2024, в 20:05
800 руб./в час