У меня есть этот компонент под названием SpecialComp, который передается в MyComp как реквизит. Мой вопрос заключается в том, как передать все реквизиты из SpecialComp (цвет, размер, вес) в MyComp, чтобы я мог переопределить атрибуты, установленные в MyComp? Другими словами, как я могу получить доступ к свойствам SpecialComp внутри MyComp?
<MyComp customcomp = {<SpecialComp color=‘green’ size=‘20’ weight=‘bold’/>} />
export const MyComp = ({customcomp}) => {
return (
<div>
{React.cloneElement(customcomp, {color: ‘red’})}
</div>
);
}
Это приложение не использует Redux и не будет его использовать
Вы проверили это? reactjs.org/docs/react-api.html#cloneelement
Customcomp.props не работает ??
Если вы не хотите использовать какое-либо решение для управления состоянием. Тогда вы можете рассмотреть возможность поднятия состояния (проп) вверх. См. примеры кода ниже:
import React from "react";
export const App = () => {
const [specialProps, setSpecialProps] = useState({
color: "green",
size: "20",
weight: "bold",
}); // make the properties as state
return (
<MyComp
customComponentStyles = {specialProps} // you can pass it here
customComponent = {
<SpecialComp
color = {specialProps.color} // you can pass it here too
size = {specialProps.size}
weight = {specialProps.weight}
/>
}
/>
);
};
export const MyComp = ({ customComponentStyles, customComponent }) => { // access the same prop here as well
return <div>{React.cloneElement(customcomp, { color: "red" })}</div>;
};
Добро пожаловать в СО! Можете ли вы объяснить свой ответ? Обратитесь к руководству Как написать хороший ответ, чтобы улучшить свой вклад.
Код, я считаю, не требует пояснений с комментариями. Пожалуйста, дайте мне знать, если это не так.
Вы можете просто получить доступ к реквизиту, позвонив customcomp.props.
<MyComp
customcomp = {<SpecialComp color = "green" size = "20px" weight = "bold" />}
/>
const MyComp = ({ customcomp }) => {
console.info(customcomp.props);
//Prints: {color: "green", size: "20px", weight: "bold"}
return <div>{React.cloneElement(customcomp, { color: "red" })}</div>;
};
export default MyComp;
CodeSandbox для этого здесь.
<MyComp customcomp = {<SpecialComp color=‘green’ size=‘20’ weight=‘bold’/>} />
export const MyComp = ({customcomp}) => {
return (
<div>
{React.cloneElement(customcomp, {...customcomp.props,color: ‘red’})}
</div>
);
}
Использовать избыточность или некоторые глобальные переменные?