React Native 组件覆盖样式 "leaking"
React Native Components Override styles "leaking"
我正在尝试使用 Atomic Design Methodology 构建我自己的特定于我的 React Native 应用程序的组件库,所以我在单个文件中有一些小组件,如段落、标题、换行、按钮、副标题等称为“原子”。我可以像这样将它们导入我的其他组件中:
import { Paragraph, Title, Wrap, Button, Subtitle } from "../Atoms";
我正在使用 tailwind-react-native-classnames. It's a great package using Tailwind CSS 构建它们,其中包含许多有用的功能,例如平台前缀和暗模式支持。
现在,有时我需要对这些组件进行独特的样式更改,所以我有一个样式道具可以将样式 Object 混合到一个,它的工作原理如下:
<Subtitle style={tw`pt-20`}>Some Text</Subtitle>
并且在组件中:
const Subtitle = ({ style, children }) => (
<Text style={Object.assign(tw`text-xl mb-3 text-octonary dark:text-white`, style)}>
{children}
</Text>
);
效果很好,任何样式都可以被覆盖,使用起来很直观,给我很大的自由度。但这就是问题所在,更改(不一致,而不是每个组件)似乎会影响其他 Screens
上的相同组件。因此,在上面的示例中,tw`pt-20`
转换为 paddingTop: 5rem
并将其应用于其他地方,其他 Screens
,具有相同的组件,甚至不应该应用此样式。
为什么会这样?它以某种方式兑现了吗?我该如何解决?
提前感谢任何help/suggestions。
感谢 @Abe 我找到了解决方案 我尝试使用 tw.style()
。所以不是这个:
const Subtitle = ({ style, children }) => (
<Text
style={Object.assign(tw`text-xl mb-3 text-octonary dark:text-white`, style)}
>
{children}
</Text>
);
我这样做了:
const Subtitle = ({ style, children }) => (
<Text
style={tw.style(
"text-xl",
"mb-3",
"text-octonary",
"dark:text-white",
style
)}
>
{children}
</Text>
);
它不像正常的 Tailwind CSS 因为每个 class 都需要单独的引号并且用逗号分隔,但它有效!但后来我更进一步,做了这个:
const Subtitle = ({ style, children }) => {
const s = tw`text-xl mb-3 text-octonary dark:text-white`;
return <Text style={tw.style(s, style)}>{children}</Text>;
};
它更紧凑,我可以编写 vanilla tailwind 而不会“泄漏”。所以 win-win-win!
我正在尝试使用 Atomic Design Methodology 构建我自己的特定于我的 React Native 应用程序的组件库,所以我在单个文件中有一些小组件,如段落、标题、换行、按钮、副标题等称为“原子”。我可以像这样将它们导入我的其他组件中:
import { Paragraph, Title, Wrap, Button, Subtitle } from "../Atoms";
我正在使用 tailwind-react-native-classnames. It's a great package using Tailwind CSS 构建它们,其中包含许多有用的功能,例如平台前缀和暗模式支持。
现在,有时我需要对这些组件进行独特的样式更改,所以我有一个样式道具可以将样式 Object 混合到一个,它的工作原理如下:
<Subtitle style={tw`pt-20`}>Some Text</Subtitle>
并且在组件中:
const Subtitle = ({ style, children }) => (
<Text style={Object.assign(tw`text-xl mb-3 text-octonary dark:text-white`, style)}>
{children}
</Text>
);
效果很好,任何样式都可以被覆盖,使用起来很直观,给我很大的自由度。但这就是问题所在,更改(不一致,而不是每个组件)似乎会影响其他 Screens
上的相同组件。因此,在上面的示例中,tw`pt-20`
转换为 paddingTop: 5rem
并将其应用于其他地方,其他 Screens
,具有相同的组件,甚至不应该应用此样式。
为什么会这样?它以某种方式兑现了吗?我该如何解决?
提前感谢任何help/suggestions。
感谢 @Abe 我找到了解决方案 我尝试使用 tw.style()
。所以不是这个:
const Subtitle = ({ style, children }) => (
<Text
style={Object.assign(tw`text-xl mb-3 text-octonary dark:text-white`, style)}
>
{children}
</Text>
);
我这样做了:
const Subtitle = ({ style, children }) => (
<Text
style={tw.style(
"text-xl",
"mb-3",
"text-octonary",
"dark:text-white",
style
)}
>
{children}
</Text>
);
它不像正常的 Tailwind CSS 因为每个 class 都需要单独的引号并且用逗号分隔,但它有效!但后来我更进一步,做了这个:
const Subtitle = ({ style, children }) => {
const s = tw`text-xl mb-3 text-octonary dark:text-white`;
return <Text style={tw.style(s, style)}>{children}</Text>;
};
它更紧凑,我可以编写 vanilla tailwind 而不会“泄漏”。所以 win-win-win!