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"
    }
})
相关推荐
wszy18097 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
wincheshe21 小时前
React Native inspector 点击组件跳转编辑器技术详解
react native·react.js·编辑器
墨狂之逸才2 天前
React Native Hooks 快速参考卡
react native
墨狂之逸才2 天前
useRefreshTrigger触发器模式工作流程图解
react native
墨狂之逸才2 天前
react native项目中使用React Hook 高级模式
react native
wayne2142 天前
React Native 状态管理方案全梳理:Redux、Zustand、React Query 如何选
javascript·react native·react.js
Mintopia3 天前
🎙️ React Native(RN)语音输入场景全解析
android·react native·aigc
程序员Agions3 天前
React Native 邪修秘籍:在崩溃边缘疯狂试探的艺术
react native·react.js
chao_6666664 天前
React Native + Expo 开发指南:编译、调试、构建全解析
javascript·react native·react.js
_pengliang4 天前
react native ios 2个modal第二个不显示
javascript·react native·react.js