(centered ? "-6ren">
gpt4 book ai didi

javascript - 样式化组件 - 根据 props 有条件地渲染整个 css block

转载 作者:行者123 更新时间:2023-12-03 13:36:16 26 4
gpt4 key购买 nike

我知道样式可以有条件地呈现,例如:

const HelloWorldLabel= styled("div")<{ centered?: boolean }>`
display: ${({ centered }) => (centered ? "block" : "flex")};;
margin: ${({ centered }) => (centered ? "auto 0" : "unset")};
padding: ${({ centered }) => (centered ? "0 15px" : "unset")};
`;

这看起来并不枯燥 - 我如何(是否可能)基于 props 渲染整个 block css 样式?

类似于:

const HelloWorldLabel= styled("div")<{ centered?: boolean }>`
if (centered) {
display: "block" ;
margin: $"auto 0";
padding: "0 15px" ;
} else {
......
}
`;

最佳答案

使用 styled-component 或任何 CSS-in-JS,您可以有条件地渲染 css block :

import styled, { css } from 'styled-components';

const light = css`
background-color: white;
color: black;
`;

const dark = css`
background-color: black;
color: white;
`;

const Box = styled.div`
${({ isDark }) => (isDark ? light : dark)}
`;
<小时/>

完整示例:

import React, { useState } from 'react';
import ReactDOM from 'react-dom';
import styled, { css } from 'styled-components';

const light = css`
background-color: white;
border: 2px solid black;
color: black;
`;

const dark = css`
background-color: black;
color: white;
`;

const FlexBox = styled.div`
margin: 20px;
padding: 20px;
${({ isDark }) => (isDark ? light : dark)}
`;

const App = () => {
const [isDark, setIsDark] = useState(false);

const toggle = () => setIsDark(b => !b);

return (
<FlexBox isDark={isDark}>
<div>Some Text</div>
<button onClick={toggle}>Change Block</button>
</FlexBox>
);
};

ReactDOM.render(<App />, document.getElementById('root'));

Edit zen-https-5bkm5

关于javascript - 样式化组件 - 根据 props 有条件地渲染整个 css block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59199256/

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