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"
    }
})
相关推荐
fly一komorebi17 小时前
React - children props与render props
react native
十步杀一人_千里不留行21 小时前
I Built an Offline-Capable App by Myself: React Native Frontend, C# Backend
前端·react native·typescript
烈焰晴天1 天前
一款基于 ReactNative 最新发布的`Android/iOS` 新架构文档预览开源库
android·react native·ios
米开朗积德1 天前
React Native原生Android SSL双向认证
react native
litongde2 天前
React Native 编程
react native·harmonyos
张元清7 天前
从零开始编写 useWindowSize Hook
react native·react.js
_一两风9 天前
React性能优化深度指南:从基础到高级技巧
react native·性能优化
谢尔登11 天前
【React Native】路由跳转
javascript·react native·react.js
Carson带你学Android11 天前
都2025了,【跨平台框架】到底该怎么选?
android·flutter·react native
谢尔登14 天前
【React Native】布局和 Stack 、Slot
javascript·react native·react.js