Size: a a a

React — русскоговорящее сообщество

2020 November 05

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Stanislav
может если не хотите хардкодить, будет лучше вложенные роуты использовать? просто я не до конца понимаю почему у вас это не работает, или как вариант залейте в песочницу - codesandbox
весь проект в песочницу?! Это, пожалуй, будет круто.
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Stanislav
это когда так:

<Route path="/x">
 <Route path="/y">...
// /x/y
так у меня так и есть. Я же роутер не для одной только корневой страницы юзаю.
источник

Ⓣ ǿ ℓ į ᶄ in React — русскоговорящее сообщество
Ребята привет, есть такой кусок кода, отвечающий за слой авторизации.
Не могу вынести в codesandbox, много связанной логики.
<Provider store={store}>
 <AuthenticationManager>
   <Router>
     <App />
   </Router>
 </AuthenticationManager>
</Provider>

const AuthenticationManager = ({ children }) => {
 const { isAuthenticated, ...other } = useSelector(getAuthSelector);

 const dispatch = useDispatch();

 useEffect(() => {
   dispatch(autoLoginAction());
 }, []);

 return (
   <AuthenticationCtx.Provider
     value={{
       isAuthenticated,
       ...other
     }}
   >
     {children}
   </AuthenticationCtx.Provider>
 );
};

В AuthenticationManager достаю isAuthenticated и другие переменные из redux store
const { isAuthenticated, ...other } = useSelector(getAuthSelector);

const PrivateRoute = ({
 render: renderProp,
 component: Component,
 ...rest
}) => (
 <Route
   {...rest}
   render={({ location, ...props }) => (
     <AuthenticationCtx.Consumer>
       {({ isAuthenticated }) => {
         if (!isAuthenticated) {
           return (
             <Redirect
               to={{
                 pathname: ROUTES.SIGN_IN,
                 state: { from: location },
               }}
             />
           );
         }

         if (renderProp) return renderProp(rest);
         return <Component {...rest} />;
       }}
     </AuthenticationCtx.Consumer>
   )}
 />
);

Вопрос:
При первом рендере AuthenticationManager выполняю запрос, чтобы узнать залогинен ли юзер и узнаю его роль
dispatch(autoLoginAction());
В redux изменяется isAuthenticated, но проблема в том, что в PrivateRoute прокинутое свойство isAuthenticated не изменяется, остаётся в первоначальном значении.
Собственно уже долго не могу въехать почему isAuthenticated не изменяется...
Help, очень нужнен чей то совет!
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Stanislav
это когда так:

<Route path="/x">
 <Route path="/y">...
// /x/y
например, у меня есть <Route path="/"> - а на сервере должно пониматься, как "/administrator/"
источник

S

Stanislav in React — русскоговорящее сообщество
Vladimir Samoilenko
например, у меня есть <Route path="/"> - а на сервере должно пониматься, как "/administrator/"
вы можете дополнительно сервер сконфигурировать как еще один вариант
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Stanislav
вы можете дополнительно сервер сконфигурировать как еще один вариант
Сервер не мой, но могу попросить. А что нужно сконфигурить?
источник

S

Stanislav in React — русскоговорящее сообщество
Stanislav
вы можете дополнительно сервер сконфигурировать как еще один вариант
я энивей не могу вам ответить почему у вас basename не работает
источник

S

Stanislav in React — русскоговорящее сообщество
Vladimir Samoilenko
Сервер не мой, но могу попросить. А что нужно сконфигурить?
чтобы все запросы проксировались на /administrator
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Stanislav
чтобы все запросы проксировались на /administrator
вряд ли получитя - там много чего еще, а я пишу всего лишь админпанельку.
источник

..

. . in React — русскоговорящее сообщество
/administrator
источник

S

Stanislav in React — русскоговорящее сообщество
Vladimir Samoilenko
вряд ли получитя - там много чего еще, а я пишу всего лишь админпанельку.
так у вас выходит несколько роутеров в одном приложении?
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Stanislav
так у вас выходит несколько роутеров в одном приложении?
нет, роутер один. Зачем мне их там несколько?
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
мое приложение совершенно отдельно и автономно.
источник

S

Stanislav in React — русскоговорящее сообщество
Vladimir Samoilenko
мое приложение совершенно отдельно и автономно.
тогда способ с проксированием должен работать
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Stanislav
тогда способ с проксированием должен работать
не знаю, не знаю... наверное, придется похардкодить, пока другого пути я не вижу. Есть у меня совершенно аналогичный проект - там работает все само, как надо. А тут... не понимаю...
источник

S

Stanislav in React — русскоговорящее сообщество
Vladimir Samoilenko
не знаю, не знаю... наверное, придется похардкодить, пока другого пути я не вижу. Есть у меня совершенно аналогичный проект - там работает все само, как надо. А тут... не понимаю...
админ панельку повесить на субдомен раз она отдельная как вариант
источник

VS

Vladimir Samoilenko in React — русскоговорящее сообщество
Stanislav
админ панельку повесить на субдомен раз она отдельная как вариант
спасибо, я помучаюсь еще, а там посмотрим.
источник

S

Stanislav in React — русскоговорящее сообщество
Vladimir Samoilenko
спасибо, я помучаюсь еще, а там посмотрим.
удачи
источник

ES

Eugene Stepanyuk in React — русскоговорящее сообщество
Eugene Stepanyuk
таблица:
<Table
     pagination={false}
     columns={configModalTable}
      dataSource={data.map((item) => ({
               ...item,
     }))} />

Пытаюсь добавить строку:
<Button onClick={this.handleAdd} >+</Button>
handleAdd = () => {
       const { count, data } = this.state;
       const newData = data;
       newData.push({ id: count });
       this.setState({
           data: newData,
           count: count + 1
       });
       console.log('data', data);
   };

Один из столбцов:
title: this.intl("title-table-resolution-executor"),
dataIndex: 'ExecutorClerk',
align: 'center',
render: () => {
      return (
       <Select defaultValue={data ? data.ExecutorClerk : null} style={{ width: '100%' }} /*onChange={(_, data) => this.onQuestionsChange(data)}*/ >
         {data ? data.map(item => (
                <Option key={item.Executors_FIO_id} value={item.ExecutorClerk} >{item.ExecutorClerk}</Option>)) : null}
           </Select>);}

Проблема в том, что новая строка создается с компонентом и несколькими значениями (старым и новым пустым), а нужно только пустой

Пробовал копировать массив обьектов и перезаписывать
const { count, data } = this.state;
   const newData = {
     id: count,
   };
   this.setState({
     data: [...data, newData],
     count: count + 1,
   });
..но так вообще не добавляет ничего, data почему-то не меняется
Парни, кто сталкивался с таким? где ошибаюсь, как правильно вставить новую строку с "пустыми" компонентами?
источник

S

Stanislav in React — русскоговорящее сообщество
Eugene Stepanyuk
Парни, кто сталкивался с таким? где ошибаюсь, как правильно вставить новую строку с "пустыми" компонентами?
скажу за себя, для меня то что вы скинули нечитабельно
источник