javascript - React native flexbox - 如何做百分比 ||列 ||响应 ||网格等

标签 javascript css reactjs flexbox react-native

在过去几周在 iOS 上使用 React Native 之后,我似乎发现了 Flex 样式的一些缺点……尤其是在“响应式”行为方面。

例如,假设您要创建一个包含卡片的 View (这些卡片的元数据来自 API)。您希望卡片占 View 宽度的 50% 减去边距和填充,并在每 2 个之后换行。

enter image description here

我对此 View 的当前实现将返回的数组拆分为包含 2 个元素的行。列表容器有 flex: 1, flexDirection: 'column,行有 flex: 1 然后每张卡片都有 flex: 1。最终结果是每行有 2 列,平均占据 View 宽度的一半。

似乎没有简单的方法可以在 React Native 样式中执行此操作,无需使用 javascript 对数据进行某种预处理以使其具有正确的样式。有没有人有什么建议?

最佳答案

使用 flexbox 可能有更好的方法来实现这一点,但我通常为视口(viewport)宽度和视口(viewport)高度定义“百分比”助手 vwvh,以CSS 视口(viewport)尺寸测量单位:

import {Dimensions} from 'react-native';

function vw(percentageWidth) {
  return Dimensions.get('window').width * (percentageWidth / 100);
}

function vh(percentageHeight) {
  return Dimensions.get('window').height * (percentageHeight / 100);
}

要在网格中流动元素,您可以计算元素的适当大小,考虑边距和视口(viewport)大小:

const COLUMNS = 3;
const MARGIN = vw(1);
const SPACING = (COLUMNS + 1) / COLUMNS * MARGIN;

const grid = {
  flex: 1,
  flexWrap: 'wrap',
  flexDirection: 'row',
  justifyContent: 'flex-start'
};

const cell = {
  marginLeft: MARGIN,
  marginTop: MARGIN,
  width: vw(100) / COLUMNS - SPACING
}

return (
  <View style={grid}>
    {this.props.things.map(thing => <View style={cell} />)}
  </View>
)

只有当您的元素数量已知且数量有限时,才应使用此技术 - 对于任意数量的卡片,出于性能原因,您应该使用 ListView,并手动将数据集拆分为行。

关于javascript - React native flexbox - 如何做百分比 ||列 ||响应 ||网格等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952984/

相关文章:

javascript - ReactJS:如何使用 localStorage 更新属性状态?

reactjs - 部署到 Github 页面时未加载图像

javascript - 链接到 asp.net 中 javascript 提示中的另一个页面

javascript - 搜索未给出确切结果,Javascript

javascript - 除非我设置断点,否则 Firefox 不会打印?

php - API 图形统计 PHP HTML CSS

css - Linux 和 Mac 浏览器中的填充问题与带有 @font-face 的 Windows 比较

javascript - 解析服务器 XMLHttpRequest 在保存大型数据集时失败

javascript - 如何更改输入中多个元素的位置

javascript - UnsupportedError : cannot produce video at Transport. 产生