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])可以吗?