我正尝试将共享组件传递给<View fixed>
元素,但输出似乎缺少样式属性...
看起来子组件的样式被保留了,但是任何子组件都没有...
进一步的研究表明,即使对所有<View>
、<Text>
和style
进行硬编码,也会导致嵌套元素被剥离...
React-PDF Repl
有没有什么原因会发生这种情况?有没有办法让我把风格包括在内?
const TableHeaders = () => (
<TableRow>
{['name', 'age', 'location'].map(label =>
<TableCell>{label}</TableCell>)}
</TableRow>
);
const TableRow = ({children}) => <View style={styles.row}>{children}</View>;
const TableCell = ({children}) => (
<View style={styles.column}>
<Text>{children}</Text>
</View>
);
const FixedHeader = () => <View fixed render={() => <TableHeaders />} />;
const HardcodedHeader = () => (
<View render={() => (
<View style={styles.row}>
{['name', 'age', 'location'].map(label => (
<View style={styles.column}>
<Text>{label}</Text>
</View>
))}
</View>
)} />
)
const HardcodedHeaderWithHardcodedStyles = () => (
<View render={() => (
<View style={{
flexDirection: 'row',
backgroundColor: 'lightblue',
borderRadius: 4,
margin: '2px 0',
padding: '10px 7px'
}}>
{['name', 'age', 'location'].map(label => (
<View style={{
margin: '0 5px',
fontSize: 10,
color: 'red'
}}>
<Text>{label}</Text>
</View>
))}
</View>
)} />
)
const Quixote = () => (
<Document>
<Page style={styles.body}>
<TableHeaders />
<FixedHeader />
<HardcodedHeader />
<HardcodedHeaderWithHardcodedStyles />
</Page>
</Document>
);
const styles = StyleSheet.create({
column: {
margin: '0 5px',
fontSize: 10,
color: 'red'
},
row: {
flexDirection: 'row',
backgroundColor: 'lightblue',
borderRadius: 4,
margin: '2px 0',
padding: '10px 7px'
},
body: {
paddingTop: 35,
paddingBottom: 65,
paddingHorizontal: 35,
}
});
ReactPDF.render(<Quixote />);
1条答案
按热度按时间ldioqlga1#
解决!
事实证明是的,使用render ={()=〉{}}属性渲染具有子元素的元素确实会引起一些麻烦,如果您不小心的话。
边距和填充
对于Margin和Padding,我最初使用字符串格式定义值,这与我们在适当的css文件中的做法类似:
这一定是在渲染过程中弄混了,并且被误解了。经过大量的实验,我们发现如果我们把定义分解成它们的组成部分,并且传递数值而不是字符串,那么它实际上是正确地执行的(注意:除非另有配置,否则将数字解释为"px"):
字体
字体有点奇怪。看起来render回调方法以某种方式将
fontFamily
,fontSize
,fontWeight
等与父元素的关联从任何子元素中剥离出来。这意味着我们必须要么重新定义我们想要样式化的<Text>
元素中的这些部分,或者我们可以将原始定义从它们的<View>
容器向下移动到那些<Text>
元素。持续问题
我唯一无法工作的是
borderRadius
。∮ ∮ ∮ ∮