gpt4 book ai didi

styled-components - 从序列化字符串生成样式化组件

转载 作者:行者123 更新时间:2023-12-02 02:46:33 25 4
gpt4 key购买 nike

是否可以从序列化字符串创建样式化组件?我是否需要将我的字符串解析为实际函数以支持内插变化?我可能存储的字符串示例:

// this is a serialized string from storage:

background-color: black;

${p => p.white && css`
background-color: white;
`}

我希望能够做这样的事情:

const MyComp = styled.div`
${myComponentStringFromStorage}
`;

<MyComp white /> // works, but displays the black background

这适用于基本 CSS 规则,但它错过了我的函数,因为它们只是作为字符串中的文本而不是真正的函数传入。

我猜我需要编写一个解析器来将我的字符串分解为发送到样式化组件工厂函数的实际函数吗?

想知道 Styled Components 是否为此内置了辅助函数,或者是否有不同的方法。

最佳答案

您可以对存储的字符串使用 eval 并将 styled.div 作为字符串使用,以便从中创建组件。

const MyComp = eval("styled.div`" + myComponentStringFromStorage + "`");

请记住,eval 可能是危险的,并且这将在运行时完成,因此它不会在不支持模板字符串的环境中工作。

const { css } = styled;

const myComponentStringFromStorage = [
"background-color: black;\n",
"\n",
"${p => p.white && css`\n",
" background-color: white;\n",
"`}"
].join("");

const MyComp = eval("styled.div`" + myComponentStringFromStorage + "`");

class App extends React.Component {
render() {
return <MyComp white>Foo</MyComp>;
}
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/styled-components/dist/styled-components.min.js"></script>

<div id="root"></div>

关于styled-components - 从序列化字符串生成样式化组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com