React Native 点击图片变大,查看图片

Index.js:

javascript 复制代码
import React from 'react'
import {
  View,
  Text,
  ScrollView,
  Image,
  Modal,
  TouchableWithoutFeedback,
} from 'react-native'
import useList from './useList'
import moment from 'moment'
import { Icon } from '../../../../component/light'
import ImageViewer from 'react-native-image-zoom-viewer'
import styles from './styles'

export default function Home(props) {
  const {
    userInfo,
    isModelVisible,
    handleShowModel,
    handleHideModel,
    handleJumpPage,
    handleQuit,
  } = useList(props)
  return (
    <ScrollView style={styles.mMeScrollView}>
      <View style={styles.mMeWrap}>
        <TouchableWithoutFeedback onPress={() => handleJumpPage('1')}>
          <View style={styles.mMeUserInfoWrap}>
            <View style={styles.mMeUserInfoMain}>
              <TouchableWithoutFeedback onPress={() => handleShowModel()}>
                <Image
                  source={{ uri: userInfo.avatarCdn }}
                  style={styles.mMeAvatar}
                  resizeMode="stretch"
                ></Image>
              </TouchableWithoutFeedback>
              <View style={styles.mMeUserInfoMainInfo}>
                <View style={styles.mMeNicknameWrap}>
                  <Text
                    style={styles.mMeNickname}
                    ellipsizeMode="tail"
                    numberOfLines={1}
                  >
                    {userInfo.nickname}
                  </Text>
                  {userInfo.isVipStatus ? (
                    <Icon name="vip" style={styles.mMeVipIcon}></Icon>
                  ) : null}
                </View>
                <View style={styles.mMeUsernameWrap}>
                  <Text
                    style={styles.mMeUsername}
                    ellipsizeMode="tail"
                    numberOfLines={1}
                  >
                    账号:{userInfo.username}
                  </Text>
                </View>
              </View>
              <View style={styles.mMeArrowIconWrap}>
                <Icon name="arrow" style={styles.mMeArrowIcon}></Icon>
              </View>
            </View>
            <View style={styles.mMeDueDateWrap}>
              {userInfo.isVipStatus === true ? (
                <Text style={styles.mMeDueDate}>
                  有效期至{moment(userInfo.dueDate - 0).format('YYYY-MM-DD')}
                </Text>
              ) : userInfo.isVipStatus === false ? (
                <Text style={styles.mMeDueDate}>VIP已经过期</Text>
              ) : null}
            </View>
          </View>
        </TouchableWithoutFeedback>
        <TouchableWithoutFeedback onPress={handleQuit}>
          <View style={styles.mMeQuitWrap}>
            <Text style={styles.mMeQuitText}>退出登录</Text>
          </View>
        </TouchableWithoutFeedback>
      </View>
      <Modal visible={isModelVisible} transparent={true}>
        <ImageViewer
          imageUrls={[
            {
              url: userInfo.avatarCdn,
            },
          ]}
          onClick={() => handleHideModel()}
        />
      </Modal>
    </ScrollView>
  )
}
javascript 复制代码
import { useState, useEffect } from 'react'
import { useNavigation } from '@react-navigation/native'
import Api from '../../../../api'

export default function useList() {
  const navigation = useNavigation()
  const [userInfo, setUserInfo] = useState({})
  const [isModelVisible, setIsModelVisible] = useState(false)

  const handleGetUserInfo = () => {
    Api.h5.userGetInfo({ isLoading: false }).then((res) => {
      if (res.code === 200) {
        let userInfo = res.data
        setUserInfo(userInfo)
        console.log(userInfo)
      }
    })
  }

  const handleShowModel = () => {
    setIsModelVisible(true)
  }
  const handleHideModel = () => {
    setIsModelVisible(false)
  }

  //跳转
  const handleJumpPage = (path) => {
    console.log(path)
  }

  const handleQuit = () => {
    navigation.navigate('Login')
  }

  useEffect(() => {
    handleGetUserInfo()
    // eslint-disable-next-line
  }, [])

  return {
    userInfo,
    isModelVisible,
    handleShowModel,
    handleHideModel,
    handleJumpPage,
    handleQuit,
  }
}

参考链接:

https://www.npmjs.com/package/react-native-image-zoom-viewer

https://chat.xutongbao.top/

相关推荐
前端 贾公子10 分钟前
Element Plus组件v-loading在el-dialog组件上使用无效
前端·javascript·vue.js
天外飞雨道沧桑11 分钟前
JS/CSS实现元素样式隔离
前端·javascript·css·人工智能·ai
qq_4198540528 分钟前
自定义组件(移动端下拉多选)中使用 v-model
前端·javascript·vue.js
你的电影很有趣28 分钟前
lesson74:Vue条件渲染与列表优化:v-if/v-show深度对比及v-for key最佳实践
前端·javascript·vue.js
颜酱1 小时前
了解 Cypress 测试框架,给已有项目加上 Cypress 测试
前端·javascript·e2e
quan26311 小时前
日常开发20251022,传统HTML表格实现图片+视频+预览
前端·javascript·html·html列表实现图片+视频
楊无好2 小时前
react中的受控组件与非受控组件
前端·react.js
菠萝+冰2 小时前
react虚拟滚动
前端·javascript·react.js
前端初见2 小时前
快速上手TypeScript,TS速通
javascript·ubuntu·typescript
Onlyᝰ3 小时前
前端tree树
javascript·vue.js·elementui