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/

相关推荐
冴羽yayujs12 分钟前
2026 年的 JavaScript 已经不是你认识的 JavaScript 了
前端·javascript
M ? A18 分钟前
你的 Vue v-for,VuReact 会编译成什么样的 React 代码?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
午安~婉18 分钟前
Electron桌面应用(续3)
前端·javascript·electron·重构通用模型·异步可迭代对象
W.A委员会18 分钟前
伪类与伪元素
前端·javascript·css
午安~婉19 分钟前
Electron桌面应用(续2)
前端·javascript·electron·路由守卫·优化llm返回的内容
weixin_443478511 小时前
Flutter学习之自定义组件
javascript·学习·flutter
编程牛马姐9 小时前
独立站SEO流量增长:提高Google排名的优化方法
前端·javascript·网络
zh_xuan9 小时前
启动RN服务端口被占用
android·react native
妮妮喔妮12 小时前
supabase的webhook报错
开发语言·前端·javascript
qq_120840937113 小时前
Three.js 大场景分块加载实战:从全量渲染到可视集调度
开发语言·javascript·数码相机