我刚刚开始尝试react native,并且正在遵循一些官方文档。
我从官方文档的样式和大小部分了解到,样式系统与css非常相似,但并不完全相同。(?)
Q1:我可以只使用样式化的组件并使用“填充:20px”等,而不用担心不同类型的设备吗?
我问这个,因为文档说:
React Native中的所有维度都是无单位的,表示与密度无关的像素。
此报价仅针对宽度和高度吗?。默认情况下是否有像素密度转换,或者是否可以实现?
Q2:样式化的组件在反应原生中有性能冲击吗?我不知道幕后发生了什么,我更喜欢尽可能多地使用原生组件。
我刚刚发现有一个包(https://github.com/styled-components/css-to-react-native)用于样式组件/本机模块。
这是解释:https://www.styled-components.com/docs/basics#react-native
回答您的第一个问题
他们所说的无单位是指像素密度是根据目标设备像素密度计算的。因此,1px的实际设备尺寸将根据设备的像素密度而有所不同,这意味着视网膜显示器中的2px和较新的“plus”尺寸的设备上的3px。
这里有一个很好的表格来说明1px在每个苹果设备中的含义:
https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/image-size-and-resolution/
对于android设备,为了简化整个事情,因为Android生态系统有更多不同分辨率的设备,react-native团队决定坚持苹果的标准,框架为我们决定什么是最佳文件和分辨率,是1x,2x还是3x。
本质上,这一切都意味着在您的样式定义中,您将使用像素作为点。如果您的原始图像是非视网膜显示器的100像素,只需将其定义为100px,并提供一个200px的版本,文件名末尾附加@2x。React将知道要使用什么文件。
查看此答案以获取更多信息:
React Native响应字体大小
回答第二个问题
一点也不。
至少在使用 react-native 和 JS 时,我们已经没有更多的性能下降。我们编写的JS代码(以及就此而言的样式化组件代码)用于操作特定平台的编译和本机代码,因此所有渲染都是在接近金属的情况下完成的,因此具有非常好的性能。应用程序必须运行的JS代码显然不如用所有本机代码编写时的性能,但它足够快,甚至最终没有区别。
首先,你提到“React Native中的所有维度都是无单位的”,但这并不完全正确,因为它们是用像素表示的。
您可以执行简单的数学运算以跨设备更改这些固定值。例如,假设您有一些可以使用的卡组件:
js prettyprint-override">import { Dimensions } from 'react-native';
const { width } from Dimensions.get('window');
您的风格:
{
height: width * 0.3,
width: width * 0.5,
}
相反,您可以使用我发现的这个令人惊叹的软件包,它对于扩展平板电脑非常好且非常棒react-native-size-事项
你可以做这样的事情:
import { ScaledSheet } from 'react-native-size-matters';
const styles = ScaledSheet.create({
container: {
width: '100@s',
height: '200@vs'
}
});
其中100@s
表示Scale(100)
和200@vs
表示verticalScale(200)
,超级酷。有关更多信息,请阅读他们的文档。
您还可以阅读这篇令人敬畏的中型博客文章 扩展反应 平板电脑的本机应用程序
我有以下样式的组件: 其中主题是: 我收到以下打字错误: 类型“未定义”不能用作索引类型。 不知道为什么假设是未定义的,如果它是在中定义的-我如何让TypeScript识别这一点?
问题内容: 如何在样式组件中使用条件渲染以使用React中的样式组件将按钮类设置为活动状态? 在css中,我会这样做: 在样式化的组件中,如果我尝试在类名中使用“ &&”,则不喜欢它。 问题答案: 你可以简单地做到这一点 在您的样式中,如下所示:
如何在样式组件中使用条件渲染来设置我的按钮类在React中使用样式组件? 在css中,我会这样做: 如果我尝试使用'
我正在开发一个带有样式组件的反应应用程序,我有一个组件“导航”。在这个组件中有更多的组件,如,等。Header例如是这样声明的: 问题是,我在不同的文件中有这个导航组件,对于所有文件,样式都很好,但现在我只想在其中一个文件中更改标题组件的背景色,它位于(?)导航组件。我该怎么做?我知道可以用const NewNav=styled(导航)之类的东西从导航组件更改样式,`但是标题呢? 先谢谢你。
Button组件通常由Text元素组成,该元素用TouchableHighlight(或其他touchable)包装。我正在尝试创建一个使用styled-components样式的按钮组件,但是我的样式很难动态响应道具。 下面,我创建了一个按钮组件,类似于样式化组件文档中的Adapting based on props示例。 导入后,我用的按钮是这样的... 所以,我希望我的纽扣看起来像这样...
我们希望在应用程序中使用MaterialUI、next组件,在应用程序中,我们将样式化组件与SASS一起使用。为此,我们使用webpack和一个原始加载程序导入生成的CSS并应用如下样式: 我们尝试这种方法是因为样式化组件似乎是一种对react组件进行样式化的好方法,但是我们希望使用常规的sass文件,这样我们的设计师就可以像普通的一样创建样式,而不必在JS中编写CSS。 现在我面对的材料ui组件