React项目仿小红书首页保姆级实战教程

目录
  • 前言
  • 前期准备
  • 项目预览
  • 项目准备
  • 工具
  • 项目初始化
  • 安装项目依赖
  • 工程化src目录
  • api目录
  • assets目录
  • components目录
  • modules目录
  • pages目录,routes目录以及utils目录
  • 页面设计思路
  • main.jsx
  • App.jsx
  • 搭建路由
  • 首页组件分析
  • 首页页面布局style.js
  • Header组件
  • Footer组件
  • 详情页页面分析
  • 点赞效果实现
  • 最后

前言

React 是一个用于构建用户界面的 Javascript库。主要用于构建UI,它起源于 Facebook 的内部项目, 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。接下来将通过实战小红书首页的详细介绍其设计思路和方法,将读者带入到react的开源世界,希望对前端的学者们有一定的帮助~

前期准备

接下来是我们需要几个开源组件库:

  • axios:它是一个基于promise 的网络请求库,用于获取后端数据([fastmock网站]可以让你在没有后端程序的情况下能真实地在线模拟ajax请求),是前端常用的数据请求工具
  • antd-mobile:由蚂蚁金融团队推出的一个开源的react组件库,这个组件库拥有很多使用的组件;
  • swiper:能实现触屏焦点图、触屏Tab切换、触屏轮播图切换等常用效果。
  • styled-compenonts:真正的css in js,增强 CSS 以对 React 组件系统进行样式设置的结果,具有简单的动态样式、轻松维护等优点。

另外,我们还需用到faskmock(在线接口工具)模拟ajax请求,它使我们在模拟前端开发中后端数据提供更为方便。

项目预览

项目准备

工具

  • Visual Studio Code(前端开发工具)
  • nodejs(安装依赖,执行代码)
  • fastmock(模拟后端数据接口)
  • chrome浏览器(负责测试调试)

项目初始化

  • 打开VSCode终端
  • 输入npm init @vitejs/app(创建项目脚手架)
  • 输入项目名 选择两次react
  • 进入新创建的项目目录(cd 项目名)
  • npm i(安装node_modules)
  • npm run dev(执行)

安装项目依赖

工程化src目录

api目录

api目录下request.js负责请求数据。其中引入axios.get异步拉取后端数据

import axios from 'axios'
export const getIdea = () =>
axios.get(`https://www.fastmock.site/mock/a4b2da993ea54ed1ba5098e058832828/beers/redbook`)

assets目录

assets目录下有font(下载的字体图标iconfont-阿里巴巴矢量图标库)以及styles(存放初始化的样式文件)。

components目录

components目录下存放通用组件,例如首页的头尾部组件。

modules目录

modules目录下rem.js负责font-size来达到适配不同移动端的效果,增强用户体验.

document.documentElement.style.fontSize =
    document.documentElement.clientWidth / 3.75 + "px"
// 横竖屏切换
window.onresize = function() {
    document.documentElement.style.fontSize =
        document.documentElement.clientWidth / 3.75 + "px"
}

pages目录,routes目录以及utils目录

pages目录存放项目各个页面的文件,而routes目录存放着网页路由,最后utils目录存放判断页面是否需要首尾js文件.

页面设计思路

main.jsx

main.jsx作为前端程序的入口,在main.jsx中引入BrowserRouter组件包裹App组件。引入字体图标样式、初始样式等...

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
import './index.css'
import { BrowserRouter } from 'react-router-dom'
import 'font-awesome/css/font-awesome.min.css'
import './assets/font/iconfont.css'
import './assets/styles/reset.css'
ReactDOM.createRoot(document.getElementById('root')).render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
)

App.jsx

在App.jsx中引入自定义组件Header(主页头部)、Footer(主页尾部)、RouteConfig组件(路由配置)构成页面。并设置loading状态(在数据还在请求中时,显示loading图标)

import { useState, Suspense } from 'react'
import './App.css'
import Header from './components/Header'
import Footer from './components/Footer'
import RoutesConfig from './routes'
function App() {
  return (
    <div className="App">
      <Header />
      <Suspense fallback={<div>loading...</div>}>
        <RoutesConfig />
      </Suspense>
      <Footer />
    </div>
  )
}
export default App

搭建路由

路由在项目中是非常重要的。Route【路由】可以理解为现实中路由器后面的接口,Routes【路由器】可以理解为现实的路由器用来管理路由。在此项目中,我设置了如下几个路由:

import Idea from '../pages/Home/Idea'
const Shopping = lazy(() => import('../pages/Shopping'))
const Mine = lazy(() => import('../pages/Mine'))
const Xiaoxi = lazy(() => import('../pages/Xiaoxi'))
const City = lazy(() => import('../pages/Home/City'))
const Faxian = lazy(() => import('../pages/Home/Faxian'))
const IdeaDetail = lazy(() => import('../pages/Home/Idea/IdeaItem/IdeaDetail'))
const More = lazy(() => import('../components/More'))
const Search = lazy(() => import('../components/Search'))

搭建路由需要注意以下几点:

  • main.jsx中引入{BrowserRouter}方能正常使用
  • 使用路由延迟加载,可提升加载速度,需引入{Suspense}
  • 若出现某个页面跳转后不显示底部导航栏,可以通过简单的条件判断和{useLocation}接受传来的值来实现。
import {useLocation} from 'react-router-dom'
const {pathname}=useLocation()
if (pathname == '/choose') return

首页组件分析

首页是此项目的主页面,进入此页面后,可以实现页面跳转等相关功能,页面上的数据存储在fastmock中。对于图标,采用iconfont上的图标足以满足大部分需求。在assets文件夹中引入提前加入好图标的font文件夹,此后也能方便地在font文件夹中修改图标样式。

首页页面布局style.js

通过ul>li并且设置好li的宽度(我使用的是rem适配方案)实现一行放2个和float: left;实现布局。

Header组件

首页Header组件作为首页的头部,负责导航3个二级子路由。左右两边用span标签定义两个点击图标。

设置NavLink设置激活状态下样式变化(点击之后状态变为actie,字体下划线变为红色)

<NavLink to={{ pathname: '/home/faxian' }} className='header-word '
            style={({ isActive }) => {
              return {
                borderBottom: isActive ? "2px solid red" : "",
                fontSize: isActive ? "0.8rem" : "0.75rem",
                fontWeight: isActive ? "700" : "400",
              }
            }}>

Footer组件

首页Footer组件位于页面尾部,是首页的tab标签栏,可以跳转至其他同级页面。

<Link to="/home/idea" className={classnames({ active: pathname2 == '/home' || pathname2 == '/' })}>
    <span>首页</span>
</Link>

详情页页面分析

详情页由头部,轮播图,文本和尾部四个方面构成。

点赞效果实现

通过设置状态true或false记录点赞按钮的激活和未激活,通过if判断分别对点赞数进行加减。并且点击后效果为修改字体图标的颜色,实现点赞按钮的效果。后期连接数据库后应将修改后的数据写回数据库。

代码如下:

if (!isGuzhang) {
            let num = guzhangNumber
            setGuzhangNumber(num + 1)
            setIsGuzhang(true)
        }
        if (isGuzhang) {
            let num = guzhangNumber
            setGuzhangNumber(num - 1)
            setIsGuzhang(false)
        }
{isGuzhang ? <i className="iconfont icon-dianzan active-red" onClick={ChangeGuzhangNumber}></i>
    : <i className="iconfont icon-dianzan" onClick={ChangeGuzhangNumber}></i>}
<div className="font-number" >{guzhangNumber ? guzhangNumber : "点赞"}

最后

以上就是该项目整个组件设计封装的过程,在今后将会将项目更加完善,敬请期待吧~(希望本篇文章对你有所帮助,点个赞再走吧铁汁~) 源码地址:RedBookDemo · joeygi/lesson_fullstack - 码云 - 开源中国 (gitee.com)faskmock:www.fastmock.site/mock/a4b2da…

到此这篇关于React项目实战【保姆级】--仿小红书首页的文章就介绍到这了,更多相关React小红书首页内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • React组件设计过程之仿抖音订单组件

    目录 前言 前期准备 实现后的组件效果 1. 组件设计思路 2. 实现 Myorder 组件 2.1 实现tab切换效果 2.2 获取数据 2.3 实现搜索功能 2.4 设置loading状态 2.5 实现Empty(空状态)组件 3. 实现 OederList 组件 4. 实现 OrderNote 组件 5. 实现 RecommendList 组件 最后 前言 作为数据驱动的领导者react/vue等MVVM框架的出现,帮我们减少了工作中大量的冗余代码, 一切皆组件的思想深得人心.组件就是对一

  • React模仿网易云音乐实现一个音乐项目详解流程

    目录 一.项目功能说明 二.最终效果 三.文件目录结构说明 四.项目技术栈 五.核心技术 六.遇到的问题 七.github链接 一.项目功能说明 暂停.播放歌曲 切换上一首.下一首歌曲 拖动进度条改变播放进度 随机播放.循环播放.单曲循环 实时展示歌词 切换不同分类的歌单.歌手.电台 实现推荐.排行榜.歌单.主播电台.歌手.新碟上架板块的展示 二.最终效果 首页: 排行榜: 歌单: 主播电台: 歌手: 新碟上架: 三.文件目录结构说明 assets:存放共用的css.font图标.image c

  • react native仿微信PopupWindow效果的实例代码

    在原生APP开发中,相信很多开发者都会见到这种场景:点击右上角更多的选项,弹出一个更多界面供用户选择.这种控件在原生开发中Android可以用PopupWindow实现,在iOS中可以用CMPopTipView,也可以自己写一个View实现.其类似的效果如下图所示: 实现思路分析: 要实现上面的视图,有很多种实现方式.前面的文章说过,要实现弹框相关的可以用React Native 提供的 Modal组件(Modal组件),使用Modal组件可以实现我们原生开发中的大多数效果. 要实现下拉三角,可

  • React Native仿美团下拉菜单的实例代码

    本文介绍了React Native仿美团下拉菜单的实例代码,最近也在学习React Native,顺便分享给大家 在很多产品中都会涉及到下拉菜单选择功能,用的最好的当属美团了,其效果如下: 要实现上面的效果,在原生中比较好做,直接使用PopWindow组件即可.如果使用React Native开发上面的效果,需要注意几个问题: 1. 在下拉的时候有动画过度效果: 2.下拉菜单出现后点击菜单项,菜单项可选择,并触发对应的事件: 3.下拉菜单中的项目可以配置: 要实现弹框效果,我们马上回想到使用Mo

  • React项目仿小红书首页保姆级实战教程

    目录 前言 前期准备 项目预览 项目准备 工具 项目初始化 安装项目依赖 工程化src目录 api目录 assets目录 components目录 modules目录 pages目录,routes目录以及utils目录 页面设计思路 main.jsx App.jsx 搭建路由 首页组件分析 首页页面布局style.js Header组件 Footer组件 详情页页面分析 点赞效果实现 最后 前言 React 是一个用于构建用户界面的 Javascript库.主要用于构建UI,它起源于 Faceb

  • Django项目uwsgi+Nginx保姆级部署教程实现

    写在最前: 非常抱歉的是,因为突如其来的疫情,我的hadoop系列断更了,很难受,因为我的分布式环境在学校,我的笔记本配置带不起来,代码跑不起来我是不敢写博客的,然后寒假在家写代码也没啥意思,看了非常多的书,把计网和操作系统重新学了一遍.因为实习的需要,未来我更多的技术可能在Python这块,但是java相关的内容我也会努力保持更新,同时也会出更多的入门教程给大家谢谢大家. 背景: 最近在学习django的过程中,用django做了一个小demo,所以试试看能不能部署到服务器上,自己顺便也熟悉一

  • SpringBoot MyBatis保姆级整合教程

    目录 Spring Boot整合MyBatis 数据准备 创建项目引入相应的启动器 编写与数据库表 编写配置文件 注解方式整合Mybatis 配置文件的方式整合MyBatis 创建接口类 创建XML映射文件 配置XML映射文件路径 编写单元测试进行接口方法测试 Spring Boot整合MyBatis MyBatis 是一款优秀的持久层框架,Spring Boot官方虽然没有对MyBatis进行整合,但是MyBatis团队自行适配了对应的启动器,进一步简化了使用MyBatis进行数据的操作 基础

  • 保姆级python教程写个贪吃蛇大冒险

    目录 导语 ​ 正文 总结 导语 ​ 贪吃蛇,大家应该都玩过.当初第一次接触贪吃蛇的时候 ,还是我爸的数字手机,考试成绩比较好,就会得到一些小奖励,玩手机游戏肯定也在其中首位,毕竟小孩子天性都喜欢~ 当时都能玩的不亦乐乎.今天,我们用Python编程一个贪吃蛇游戏哦~ 正文 1.将使用两个主要的类(蛇和立方体). #Snake Tutorial Python import math import random import pygame import tkinter as tk from tki

  • iOS仿小红书呼吸灯动画(核心动画和定时器)两种方式实现

    最近公司需求做个类似小红书的标签呼吸灯动画,经过一段时间研究使用两种方式实现了该效果... 第一种方式使用定时器加 UIView动画,核心方法如下 -(void)begigFlashAnimation { // 缩放 + 透明度动画 self.flashView.transform = CGAffineTransformMakeScale(0.1, 0.1); [UIView animateWithDuration:3 animations:^{ self.flashView.transform

  • Android仿小红书欢迎界面

    1,觉得小红书的欢迎界面感觉很漂亮,就想来学习学习一下来实现类似于这种效果 . 原效果图如下: 2,根据效果我们来一点点分析 第一步:首先看一下我们的主界面布局文件视图效果如下: main_activity.xml文件代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/a

  • TypeScript保姆级基础教程

    目录 什么是 TypeScript? 那么 ts 和 js 有什么区别呢? 什么是类型注解? ts 的类型 联合类型: 类型别名 数组类型 函数 定义单个函数 统一定义函数格式 函数返回值类型void 函数-可选参数 可选和默认值的区别 对象类型-单独使用 对象类型-类型别名 接口 接口继承 元组 字面量类型 枚举 any 类型 使用any的场景 什么是 TypeScript? TypeScript,简称 ts,是微软开发的一种静态的编程语言,它是 JavaScript 的超集. 那么它有什么特

  • 新手必看Unity2019 2020保姆级安装教程

    1.通过UnityHub安装unity UnityHub下载路径,UnityHub安装按照步骤来就可以了. 打开UnityHub,点安装. 3.选择自己要安装的版本,由于unity2019以上的可以在选择组件的时候选择安装sdk和ndk,所以建议选择unity2019版本以上的.在导处apk文件的时候需要sdk和ndk. 4.如果自己没有安装vs,那么在这里可以选择添加给unity添加vs组件:因为我想开发Andriod游戏,所以我选了Android Build Support,并勾选sdk和n

  • JavaWe商品项目保姆级解析IDEA版的图文教程(配置篇)

    首先这里我创建的工程是Maven工程(需要在磁盘中解压MAVEN,然后配置MAVEN的环境变量) 一. 先去maven 官网:http://maven.apache.org/download.cgi#下载压缩包,下拉页面可以看到好多版本,注意下载的版本版本后面是带.zip的:apache-maven-3.5.4-bin.zip,点击下载即可. 配置环境变量 一丶右键此电脑,点击属性 二丶选择高级系统设置 三丶点击环境变量 四丶添加一个新的系统变量MAVEN_HOME 变量值是你MAVEN解压的目

  • 保姆级官方yolov7训练自己的数据集及项目部署详解

    目录 前言 第一步 数据集准备 第二步 train.py载入自己的数据集并训练 第三步 将训练好的pt文件做成接口调用 总结 前言 首先,先说明我只是初步接触yolov7,写这篇文章的主要目的是可以让大家快速应用自己的数据集进行训练.没有接触过yolov5也没有关系,该篇文章会逐步进行演示如何训练. 第一步 数据集准备 首先确保你有labelimg标图软件,若无,需要自行去下一个并看一下标图教程. 当你已经标注完成,获得了img以及相对应的xml之后(如图) 接下来就是可选择项:是否需要图像增强

随机推荐