我正在重构一些React Native代码以使用样式化组件,但在设计FontAwesome图标时遇到了问题。我得到一个错误,例如
样式组件2.default.图标字体真棒不是一个函数
所以我理解这个GitHub问题,我需要包装组件并根据扩展自定义组件的文档传递class Name
prop。所以我有这个:
import React from 'react';
import {
Text,
TouchableOpacity,
} from 'react-native';
import PropTypes from 'prop-types';
import IconFontAwesome from 'react-native-vector-icons/FontAwesome';
import styled from 'styled-components';
const StyledTouchableOpacity = styled.TouchableOpacity`
width: ${props => (props.large ? '100%' : '80%')};
height: ${props => (props.large ? '80px' : '60px')};
font-size: ${props => (props.large ? '18px' : '15px')};
background: '#f1d746';
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
`;
const StyledText = styled.Text`
font-size: 15;
font-weight: bold;
`;
const StylableIcon = ({ className }) => (
<IconFontAwesome className={className} />
);
const StyledIconFontAwesome = styled.StylableIcon`
font-size: 15;
padding: 10px;
`;
const Button = (props) => {
let _icon = null;
if (props.icon) {
_icon = (
<StyledIconFontAwesome name={props.icon} />
);
}
return (
<StyledTouchableOpacity>
<StyledText>{props.text}</StyledText>
{_icon}
</StyledTouchableOpacity>
);
};
Button.defaultProps = {
icon: null,
};
Button.propTypes = {
icon: PropTypes.string,
};
export default Button;
这会导致类似的错误
styledComponents2.default。StylableIcon不是函数
关于我在这里做错了什么,有什么建议吗?谢谢大家。
好的,让它工作:
import React from 'react';
import {
Text,
TouchableOpacity,
} from 'react-native';
import PropTypes from 'prop-types';
import IconFontAwesome from 'react-native-vector-icons/FontAwesome';
import styled from 'styled-components';
const StyledTouchableOpacity = styled.TouchableOpacity`
width: ${props => (props.large ? '100%' : '80%')};
height: ${props => (props.large ? '80px' : '60px')};
font-size: ${props => (props.large ? '18px' : '15px')};
background: '#f1d746';
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
`;
const StyledText = styled.Text`
font-size: 15;
font-weight: bold;
`;
const StyledIconFontAwesome = styled(IconFontAwesome)`
font-size: 15;
padding: 10px;
`;
const Button = (props) => {
let _icon = null;
if (props.icon) {
_icon = (
<StyledIconFontAwesome name={props.icon} />
);
}
return (
<StyledTouchableOpacity>
<StyledText>{props.text}</StyledText>
{_icon}
</StyledTouchableOpacity>
);
};
Button.defaultProps = {
icon: null,
};
Button.propTypes = {
icon: PropTypes.string,
};
export default Button;
所以这里有两个修复:
styled(Something)
,而不是styled。一些
(谢谢@bennygenel)StylableIcon
是不必要的。我可以直接调用styled(IconFontAwesome)
Button组件通常由Text元素组成,该元素用TouchableHighlight(或其他touchable)包装。我正在尝试创建一个使用styled-components样式的按钮组件,但是我的样式很难动态响应道具。 下面,我创建了一个按钮组件,类似于样式化组件文档中的Adapting based on props示例。 导入后,我用的按钮是这样的... 所以,我希望我的纽扣看起来像这样...
react-native-icons 是 React Native 简单易用的图标组件,包括 5 种不同的图标字体和 2,444 个图标。 当前支持 5 种字体: FontAwesome 4.4 包含 585 icons ionicons 2.0.0 包含 733 icons,以及许多iOS 7风格概述图标 Foundation icons 包含 283 icons Zocial 包含 99 so
我正在尝试创建一个包含
我刚刚开始尝试react native,并且正在遵循一些官方文档。 我从官方文档的样式和大小部分了解到,样式系统与css非常相似,但并不完全相同。(?) Q1:我可以只使用样式化的组件并使用“填充:20px”等,而不用担心不同类型的设备吗? 我问这个,因为文档说: React Native中的所有维度都是无单位的,表示与密度无关的像素。 此报价仅针对宽度和高度吗?。默认情况下是否有像素密度转换,或
我在React web上使用样式化组件已经有一段时间了,但最近我开始开发一个React Native应用程序,我决定在中使用样式化的组件。当设计只有属性的组件时,比如默认的components,这是非常好的。 但是,我遇到的问题是,当我需要为具有多个样式属性的更复杂的组件设置样式时,例如、等。 当只有一个样式属性具有不同的名称时,我可以执行以下操作: 这完美无缺,但是当组件具有多种样式时,我不知道
jsx 使用上面的代码,im得到控制台错误: