#reactjs #material-ui
Вопрос:
В примере слайдера пользовательского интерфейса Material (ссылка на codesandbox: https://codesandbox.io/s/hzhqj?file=/demo.tsx), есть возможность передать пользовательские компоненты, если вы хотите использовать другой подкомпонент для основного компонента.
<Slider
valueLabelDisplay="auto"
components={{
ValueLabel: ValueLabelComponent,
}}
aria-label="custom thumb label"
defaultValue={20}
/>
По умолчанию пользовательский интерфейс Material передает «реквизит» ValueLabelComponent
, поэтому, по сути, это:
ValueLabel: (props) => ValueLabelComponent(props)
Я хотел бы передать сюда дополнительные данные, простую переменную. Пользовательский компонент уже может принимать второй параметр ( ValueLabelComponent(props, additionalData)
)
Как передать дополнительные параметры пользовательскому компоненту в этой структуре?
(Примечание: я пробовал это, но, конечно, это не сработает: ValueLabel: (props, additionalData) => ValueLabelComponent(props, additionalData)
)
Ответ №1:
Есть три способа сделать это:
1. Использование .bind
метода
<Slider
valueLabelDisplay="auto"
components={{
ValueLabel: ValueLabelComponent.bind(null, 'test'),
}}
aria-label="custom thumb label"
defaultValue={20}
/>
И тогда вы сможете получить доступ к переданным вами данным, таким как:
function ValueLabelComponent(data: any, props: Props) {
console.log(data); // contains a string 'test'
// other work here
}
2. Использование функции стрелки
<Slider
valueLabelDisplay="auto"
components={{
ValueLabel: (props) => ValueLabelComponent("test", props),
}}
aria-label="custom thumb label"
defaultValue={20}
/>
3. Визуализация и передача данных в реквизитах
<Slider
valueLabelDisplay="auto"
components={{
ValueLabel: (props) => <ValueLabelComponent {...props} testProp="test" />,
}}
aria-label="custom thumb label"
defaultValue={20}
/>
И тогда вы сможете получить доступ к переданным вами данным, таким как:
function ValueLabelComponent(props: Props) {
console.log(props.testProp); // contains a string 'test'
// other work here
}
Комментарии:
1. Какой метод предпочтительнее?