Reactjs 使用React.createElement创建样式化组件
我想创建一个带有函数的Reactjs 使用React.createElement创建样式化组件,reactjs,styled-components,createelement,Reactjs,Styled Components,Createelement,我想创建一个带有函数的样式化组件,将元素作为参数,我使用React.createElement调用创建它 const StyledComponent = (element) => styled(element)` position: absolute; top: 0; bottom: 0; left: 0; right: 0; `; const myComponent = (props) => { const element
样式化组件
,将元素作为参数,我使用React.createElement
调用创建它
const StyledComponent = (element) => styled(element)`
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
`;
const myComponent = (props) => {
const element = React.createElement('div', null, `Hello World!`);
return (
StyledComponent(element)
);
}
这将导致以下错误:
Uncaught Error: Cannot create styled-component for component: [object Object].
我可能遗漏了一些内容,但无法找出原因。无法创建渲染节点的HOC。以下行是渲染调用:
const element = React.createElement('div', null, `Hello World!`);
// this is the same as:
const element = <div >Hello World</div>
现在您可以创建一个样式化组件并对其进行渲染。完整(相关)代码:
无法创建渲染节点的HOC。以下行是渲染调用:
const element = React.createElement('div', null, `Hello World!`);
// this is the same as:
const element = <div >Hello World</div>
现在您可以创建一个样式化组件并对其进行渲染。完整(相关)代码:
让我们把事情简单化
import styled from'styled component'//导入用于生成样式化组件的库
如果for intance希望基于
创建一个样式化组件,您可以执行以下操作:
const MyP=styled.p
颜色:红色;
字体大小:10px;
字体大小:粗体
你可以根据自己的需要,发布尽可能多的css
definition广告。
现在使用它:
constmycomponent=()=>{
你好
}
在这里,您可以使用“p”(未设置样式)而不是“MyP”
它还适用于常量MyComponent=React.createElement(MyP,null,'Hello');
希望它能帮助你让事情变得简单
import styled from'styled component'//导入用于生成样式化组件的库
如果for intance希望基于
创建一个样式化组件,您可以执行以下操作:
const MyP=styled.p
颜色:红色;
字体大小:10px;
字体大小:粗体
你可以根据自己的需要,发布尽可能多的css
definition广告。
现在使用它:
constmycomponent=()=>{
你好
}
在这里,您可以使用“p”(未设置样式)而不是“MyP”
它还适用于常量MyComponent=React.createElement(MyP,null,'Hello');
希望它有帮助,答案几乎是正确的,但是您仍然需要在内联组件函数中传递className属性,以便应用样式化组件中定义的样式
我找到了正确的答案,我决定使用JSX语法,如果需要传递refs,请使用React.cloneElement
完整示例:
const StyleMyElement = (Element) => styled(({ className }) => <Element.type {...Element.props} className={className} />)`
position: absolute;
top: 0;
...
`;
...
const element = () => React.createElement('div', null, `Hello World!`);
const StyledComponent = StyleMyElement(element);
return (
<StyledComponent />
)
constylemyElement=(Element)=>styled(({className})=>)`
位置:绝对位置;
排名:0;
...
`;
...
const element=()=>React.createElement('div',null,'Hello World!`);
常量StyledComponent=StyleMyElement(元素);
返回(
)
答案几乎正确,但您仍然需要在内联组件函数中传递className属性,以便应用样式化组件中定义的样式
我找到了正确的答案,我决定使用JSX语法,如果需要传递refs,请使用React.cloneElement
完整示例:
const StyleMyElement = (Element) => styled(({ className }) => <Element.type {...Element.props} className={className} />)`
position: absolute;
top: 0;
...
`;
...
const element = () => React.createElement('div', null, `Hello World!`);
const StyledComponent = StyleMyElement(element);
return (
<StyledComponent />
)
constylemyElement=(Element)=>styled(({className})=>)`
位置:绝对位置;
排名:0;
...
`;
...
const element=()=>React.createElement('div',null,'Hello World!`);
常量StyledComponent=StyleMyElement(元素);
返回(
)
hello@Felix,感谢您的澄清,我显然忽略了元素和组件之间的区别您上一个代码示例运行良好,但有一个小问题-由样式化函数调用定义的类将不会应用于结果组件的道具。换句话说:呈现的内容实际上没有样式化。仍然在与正确的语法抗争。我需要将类名传递给props,因此从样式化组件生成的类名将应用于applyhello@Felix,感谢您的澄清,我显然忽略了元素和组件之间的区别您的上一个代码示例运行良好,有一个小问题——由样式化函数调用定义的类将不会应用于结果组件的道具。换句话说:呈现的内容实际上没有样式化。仍然在与正确的语法抗争。我需要将类名传递给props,这样从样式化组件生成的类名将应用于anks,但实际上在我的组件中,负责呈现元素,元素来自外部,不应该在组件中定义。谢谢,但实际上在我的组件中,负责呈现元素,元素来自外部,不应该在组件中定义。您知道如何获取模板文本、创建类型的对象并动态传入它吗?我希望类似于export const StyleMyText=(type:TextStyleKey,Element:React.ReactElement)=>styled({className})=>)(TextStyles[type])代码>是否有效?您是否知道如何获取模板文本,生成类型的对象,并动态传入该对象?我希望类似于export const StyleMyText=(type:TextStyleKey,Element:React.ReactElement)=>styled({className})=>)(TextStyles[type])代码>可以吗?