Ale*_*lex 5 javascript react-native styled-components
假设我有一个基本的、基本级别的 StyledText 组件;
import styled from 'styled-components/native'
const StyledText = styled.Text`
font-size: 16px;
color: pink;
`
export default StyledText
Run Code Online (Sandbox Code Playgroud)
然后我有一个处理标题的 Text 组件的扩展;
import StyledText from '../StyledText'
const StyledTitle = StyledText.extend`
color: black;
font-weight: bold;
font-size: 20px;
`
export default StyledTitle
Run Code Online (Sandbox Code Playgroud)
简单到此为止。
我需要做的是根据设备的大小动态增加字体大小。一个简单的函数就可以解决这个问题。但是有没有一种方法可以让调整大小函数或 util 只能从主 StyledText 组件调用一次,而不是在整个应用程序中重复使用 StyledText 扩展的每个实例?
只是为了澄清,围绕增加大小的逻辑没有问题,问题是在每次使用任何扩展 Text 组件时导入和使用 util。
例如,util 可能如下所示;
// utils
export function fontSize(size) {
// do some logic here to increase the size, or whatever...
return `
font-size: ${size}px;
`
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用;
import styled from 'styled-components/native'
import { fontSize } from 'utils/StyledUtils'
const StyledText = styled.Text`
${fontSize(16)}
color: pink;
`
export default StyledText
Run Code Online (Sandbox Code Playgroud)
问题是必须在整个应用程序中导入和引用 util 文件。
我不久前遇到了类似的问题,我通过创建一个通用函数解决了这个问题,该函数以大小为参数并返回适合不同屏幕分辨率的新大小。您可以对应用程序中的每种尺寸使用此功能。
以下是responsive.js 文件中的函数:
import { Dimensions } from 'react-native'
const deviceHeight = Dimensions.get('window').height;
const deviceWidth = Dimensions.get('window').height;
export const ResponsiveSize = (size) => {
if(deviceHeight===568) { return size }
else if(deviceHeight===667) size*1.17
else if(deviceHeight===736) size*1.29
else if(deviceHeight===1024) size*1.8
}
Run Code Online (Sandbox Code Playgroud)
请注意,大小会乘以一些固定数字(我为 iOS 设备执行此操作),您可以对其进行修改以满足您的需求。
然后您可以按如下方式设置文本样式:
import styled from 'styled-components/native'
import { ResponsiveSize } from './responsive'
const StyledText = styled.Text`
font-size: ResponsiveSize(16);
color: pink;
`
export default StyledText
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1731 次 |
| 最近记录: |