zoukankan      html  css  js  c++  java
  • React Native填坑之旅--Stateless组件

    Stateless component也叫无状态组件。有三种方法可以创建无状态组件。

    一般一个组件是怎么定义的:

    很久以前的方法:

    const Heading = createClass({
        render() {
            return <Text>{this.props.title}</Text>
        } 
    })
    

    后来有了ES6

    class Heading extends Component { 
        render() {
            return <Text>{this.props.title}</Text> 
        } 
    }
    

    接ES6的光,看起来好了很多。

    填坑

    但是,一个组件不需要状态的时候还给出那么多的定义还是不够精炼,太麻烦。于是用stateless component来填这个坑。

    // Stateless functions
    const Heading = ({title}) => <Text>{title}</Text>
    

    看起来是多么的简洁、有力!

    来个完整的例子:

    const HiTitle = ({title}) => (
      <Text style={styles.title}>
        {title}
      </Text>
    )
    
    const App = () => (
      <View style={styles.container}>
        <HiTitle title='A stateless component' />
      </View>
    )
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            justifyContent: 'center',
            alignItems: 'center',
            backgroundColor: '#F5FCFF'
        },
        title: {
            fontSize: 36,
            fontWeight: 'bold',
            color: 'red'
        }
    })
    
    AppRegistry.registerComponent('AwesomeProject', () => App);
    

    运行起来是这样的:

    显然stateless component更加的有表达力。但是在一个APP里也不可能所有的组件都是无状态的。所以最好是让一些容器(container)来包裹各种组件,而这些组件就可以写成是无状态的。用过Redux的都知道这么搞很有前途。

    无状态组件没有生命周期的方法和显示的状态,这样加大的减少了代码量。但是无状态组件还是可以接收props的。比如,上例中的const HiTitle = ({title}) => (...)里的{ title }就是用来解析赋值props的。

    既然可以接收props,那么也就可以设置propTypesdefaultProps。如:

    const HiTitle = ({title}) => (
      <Text style={styles.title}>
        {title}
      </Text>
    )
    
    HiTitle.propTypes = {React.PropTypes.string.isRequired}
    HiTitle.defaultProps = {title: 'stateless component'}
    
  • 相关阅读:
    Win7操作系统防火墙无法关闭的问题 无法找到防火墙关闭的地方的解决的方法
    【微信】微信获取TOKEN,以及储存TOKEN方法,Spring quartz让Token永只是期
    OC内存管理总结,清晰明了!
    下次自己主动登录(记住password)功能
    linux删除svn版本号库
    Python中可避免读写乱码的一个强慷慨法
    Tomcat源代码阅读#1:classloader初始化
    iOS关于图片点到像素转换之杂谈
    hdu 3804树链剖分+离线操作
    cdn缓存
  • 原文地址:https://www.cnblogs.com/sunshine-anycall/p/6193227.html
Copyright © 2011-2022 走看看