- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Button 组件通常由用 TouchableHighlight(或其他可触摸的)包裹的 Text 元素组成。我正在尝试创建一个使用 styled-components 设置样式的 Button 组件,但是我无法让我的样式动态响应 props。
按钮组件
下面,我创建了一个类似于 Adapting based on props 的 Button 组件。在样式组件文档中找到的示例。
import React from 'react';
import { Text, TouchableHighlight } from 'react-native';
import styled from 'styled-components/native';
const colors = {
accent: '#911',
highlight: '#D22',
contrast: '#FFF',
}
const Label = styled.Text`
color: ${props => !props.outline ? colors.contrast : colors.accent};
font-weight: 700;
align-self: center;
padding: 10px;
`
const ButtonContainer = styled.TouchableHighlight`
background-color: ${props => props.outline ? colors.contrast : colors.accent};
width: 80%;
margin-top: 5px;
border-color: ${colors.accent};
border-width: 2px;
`
const Button = (props) => {
return (
<ButtonContainer
onPress={props.onPress}
underlayColor={colors.highlight}
>
<Label>
{props.children}
</Label>
</ButtonContainer>
);
};
export default Button;
<Button
outline
onPress={() => console.log('pressed')}>
Press Me!
</Button>
outline
Prop 正在传递给
Button
成分。
最佳答案
在这里你有:
const Button = (props) => {
return (
<ButtonContainer underlayColor={colors.highlight}>
<Label>
{props.children}
</Label>
</ButtonContainer>
);
};
ButtonContainer
是一个普通的 React 组件,你不会期望
props
传递给
Button
自动传递给
ButtonContainer
.你必须做
<ButtonContainer underlayColor={colors.highlight} {...props} />
去做吧。
ButtonContainer
是一个普通的 React 组件,唯一的区别是你使用 HOC 预先应用了一些样式。
React.createElement
打电话,你看没办法
props
可以自动传递,因为函数的参数不会自动传递给其中的函数调用。
const Button = (props) => {
return React.createElement(ButtonContainer, { underlayColor: colors.highlight }, ...);
};
styled-components
无关.你只需要自己把 Prop 传给
ButtonContainer
,以及到
Label
.
const Button = (props) => {
return (
<ButtonContainer underlayColor={colors.highlight} onPress={props.onPress} outline={props.outline}>
<Label outline={props.outline}>
{props.children}
</Label>
</ButtonContainer>
);
};
ButtonContainer
可以将它们传递给
Label
使用
React.Children
和
React.cloneElement
蜜蜂。但是
ButtonContainer
出于明显的原因不会这样做,例如你不想要
underlayColor
和
onPress
传递给
Label
自动地。这会导致很多令人困惑的错误。
关于button - 使用样式化组件在 React Native 中动态样式化按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47106781/
我遇到过这个 html: 上面的html和这个有什么区别: 最佳答案 来自MDN page on the tag : 对于 type 的属性标签,可能的值是: 提交:按钮将表单数据提交给服务器
Button button= (Button) findViewbyID(R.id.button); 和 Button button = new Button(this); 有什么区别? 最佳答案 有
我是一名优秀的程序员,十分优秀!