Передача реквизита динамически загружаемым компонентам

export const Menus = {
    user1: {
        userMenu: <User1Menu />
    },
    user2: {
        userMenu: <User2Menu />
    }
};



render() {
...
// I want to pass props to <User1Menu /> ?
{Menus[user1].userMenu}
}

У меня такая ситуация, когда я должен динамически передавать реквизиты компонентам. Я пытался withProps() from recompose но не повезло.

Любая помощь будет оценена Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
58
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам нужно поместить ключ в кавычки, например.

Menus["user1"].userMenu

Спасибо, но это не решает реальную проблему передачи реквизита.

Raheel 07.03.2019 14:28

Используйте точечную нотацию: Menus.user1.userMenu или используйте строковую нотацию: Menus["user1"].userMenu

Вы не можете использовать Menus[user1].userMenu, пока у вас не будет переменной с именем user1.

Я предлагаю сделать ниже, это уменьшает обход объекта на шаг (Menus.user1 или Menus["user1"])!

export const Menus = {
  user1: <User1Menu />,
  user2: <User2Menu />
};

Обновленный ответ:

Вы можете передать реквизиты, которые вам нужны, как параметр функции, подобный этому, и тем самым передать реквизит компоненту.

export const Menus = {
    user1: (yourProps) => <User1Menu ...yourProps />
    user2: (yourProps) => <User2Menu ...yourProps />
});

например, вы можете сделать объект из реквизита, который собираетесь передать:

const yourPropsThatYourePassingToComponent = {
  onChange: (param) => this.onChange(param),
  arrayOfObj: [{ key1:"val1" }, { key2:"val2" }],
  fetchSomething: this.props.fetchSomething
};

и передайте его компоненту в Меню вот так: Menus.user1(yourPropsThatYourePassingToComponent).

Образец предназначен только для демонстрационных целей. Настоящая проблема заключается в передаче реквизита здесь. Не могли бы вы отредактировать свой ответ?

Raheel 07.03.2019 14:27
Ответ принят как подходящий

Вы можете обернуть свои компоненты в функцию, которая будет получать и распространять реквизиты.

export const Menus = {
    user1: {
        userMenu: (props) => <User1Menu {...props}/>
    },
    user2: {
        userMenu: (props) => <User2Menu {...props}/>
    }
};



render() {
...
// I want to pass props to <User1Menu /> ?
{Menus['user1'].userMenu({prop1: 'prop1value', prop2: 'prop2value'})}
}

Он жалуется на отсутствующее отображаемое имя компонента

Raheel 07.03.2019 14:30

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

Noman Hassan 08.03.2019 11:38

Другие вопросы по теме