React Native 亲切的组件们(函数式组件/class组件)和陌生的样式

写多了taro, 看见react native中的组件好亲切啊,几乎一模一样。

一、函数式组件 --- 常用

1)无状态,每次刷新都是生成一个新的状态

2)基于状态变化的管理

3)简洁,代码少,易于服用

javascript 复制代码
import React from "react";
import { View, Text } from 'react-native';

// 子组件 TestFunctionDemo.js
export default function TestFunctionDemo(props) {
    const { name, info: {age, sex} } = props

    const [address, setAddress] = useState('中国')

    useEffect(() => {
        // 第一次加载完成
        setTimeout(() => {
            setAddress('大陆')
        }, 2000)
    }, [])

    useEffect(() => {
        // 监听address
    }, [address])

    return (
        <View style={{height: 200, width: '80%', padding: 20, borderRadius: 10, backgroundColor: '#ccc'}}>
            <Text>我是子组件</Text>
            <Text>姓名:{ name }</Text>
            <Text>年龄:{ age }</Text>
            <Text>性别:{ sex }</Text>
            <Text>{`地址:${ address }`}</Text>
            { props.children}
        </View>
    )
}


// 简写
const TestFunctionDemo = (props) => {
	// ...
}
export default TestFunctionDemo

// 或
export default (props) => {
   // ...
}
二、class组件

1) 有状态state, 每次都是修改的同一个状态

2) 基于生命周期的管理

javascript 复制代码
// 子组件 TestClassDemo .js
class TestClassDemo extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            address: '中国'
        }
    }

    componentDidMount() {
        setTimeout(() => {
            this.setState({
                address: '大陆'
            })
        }, 2000)
    }

    render() {
        const { name, info: {age, sex} } = this.props
        const { address } = this.state
        return (
            <View style={{height: 200, width: '80%', padding: 20, borderRadius: 10, backgroundColor: '#ccc'}}>
                <Text>我是子组件</Text>
                <Text>姓名:{ name }</Text>
                <Text>年龄:{ age }</Text>
                <Text>性别:{ sex }</Text>
                <Text>{`地址:${ address }`}</Text>
                { this.props.children}
            </View>
        )
    }
}

export default TestClassDemo
三、父组件引入
javascript 复制代码
// 父组件app.js中引入
import TestFunctionDemo from './src/components/TestFunctionDemo';
import TestClassDemofrom './src/components/TestClassDemo';

// ...
const info = {
  age: 20,
  sex: 'nan'
}

// ...

<TestFunctionDemo 
  name="zhangsan" 
  info={info}>
  <Text>我是通过插槽加入的!</Text>
</TestFunctionDemo>

<TestClassDemo 
  name="zhangsan" 
  info={info}>
  <Text>我是通过插槽加入的!</Text>
</TestClassDemo>

以上是不是和react一模一样

四、样式

!!!这里和react不一样

javascript 复制代码
import React from "react";
import { View, Text, StyleSheet } from 'react-native';

// 子组件 TestFunctionDemo.js
export default (props) => {
   // ...

 	return (
        <View style={styles.box}>
        	// 多个样式用数组
            <Text style={[styles.textLine, styles.title]}>我是子组件</Text>
            <Text  style={styles.textLine}>姓名:{ name }</Text>
            // ...
        </View>
    )
}

// 样式
const styles = StyleSheet.create({
    box: {
        height: 200, 
        width: '80%', 
        padding: 20, 
        borderRadius: 10, 
        backgroundColor: '#ccc'
    },
    textLine: {
        fontSize: 18,
        color: 'blue'
    },
    title: {
        fontWeight: "bold"
    }
})
相关推荐
一叶难遮天7 小时前
开启RN之旅——常用API
react native·rn api·移动端跨平台开发
光影少年1 天前
react navite跨端项目的痛点、踩过哪些坑、怎么解决
前端·react native·react.js
一叶难遮天1 天前
开启RN之旅——系统组件
react native·移动端开发·移动端跨平台
杉氧1 天前
打破边界(二):在 React Native 中嵌入原生 UI 组件 (Native UI Components)
android·前端·react native
光影少年2 天前
如何做大型React+RN 项目架构设计、目录规范
前端·react native·react.js
不爱吃糖的程序媛2 天前
从 0 到 1:react-native-transformer-text-input 鸿蒙化适配实录
react native·transformer·harmonyos
不爱吃糖的程序媛2 天前
React Native 三方库鸿蒙适配实战:react-native-emoji-popup(Fabric 自定义组件)从 0 到 1
react native·harmonyos·fabric
搬砖的kk2 天前
从 0 到 1:react-native-screenshot-aware 鸿蒙适配实战(RNOH 0.84)
react native·华为·harmonyos
光影少年2 天前
从输入URL到页面渲染,React/RN 整体加载流程
前端·javascript·react native·react.js·前端框架