当前位置: 首页 > java >正文

Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!!

在这篇博客中,我们将实现一个简洁的 Hear from My Clients 客户评价区域。这个区块在个人主页中可以突显用户体验和专业度,帮助网页创建信任感和个人品牌形象。

React + ThreeJS 个人主页小项目:🎥 06 · 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)


🌟 项目特性概览

  • 简洁且有调性,给予完整的星级评分表示,增强专业度
  • 应用 Tailwind CSS 快速实现回答式 UI 布局
  • 信息条目数据化驱动,方便扩展

📂 数据来源

所有评价条目从 constants/index.js clientReviews 常量数组动态渲染,如:

{id: 1,name: 'Emily Johnson',position: 'Marketing Director at GreenLeaf',img: 'assets/review1.png',review:'Working with Adrian was a fantastic experience. He transformed our outdated website into a modern, user-friendly platform. His attention to detail and commitment to quality are unmatched. Highly recommend him for any web dev projects.',}

✏️ JSX 格式解析

所有客户评价项通过 map 形成。每条评论包括三大块内容:评论内容、用户信息、星级评分:

{clientReviews.map(({id, name, review, img, position}) => (<div key={id} className='client-review'><p className='text-white font-light'>{review}</p><div className='client-content'><div className='flex gap-3'><img src={img} alt={name} className='w-12 h-12 rounded-full' /><div className='flex flex-col'><p className='font-semibold text-white-800'>{name}</p><p className='to-white-500 md:text-base text-sm'>{position}</p></div></div><div className='flex self-end items-center gap-2'>{Array.from({length: 5}).map((_, index) => (<img key={index} src='/assets/star.png' alt='star' className='w-5 h-5' />))}</div></div></div>
))}

每条评价都包括:

  • 评价文本
  • 客户头像 + 姓名 + 职位
  • 绝对 5 颗星级图标表示

🖊️ 样式解析

为了保持统一的风格,我们进一步封装了 Tailwind 样式类名:

  • .client-container 应该是一个按响应列表布局,展示所有客户评价
  • .client-review:单条评价样式,包括背景、圆角和防红背
  • .client-content:用于格式化用户头像+信息和星级应符层

例如:

<section className='c-space my-20'><h3 className='head-text'>Hear from My Clients</h3><div className='client-container'><!-- 多条评价项格式 --></div>
</section>

📍 Clients.jsx全部代码

import React from 'react'
import { clientReviews } from '../constants'const Clients = () => {return (<section className='c-space my-20'><h3 className='head-text'>Hear from My Clients</h3><div className='client-container'>{clientReviews.map(({id, name, review, img, position}) => (<div key={id} className='client-review'><div><p className='text-white font-light'>{review}</p><div className='client-content'><div className='flex gap-3 '><img src={img} alt={name} className='w-12 h-12 rounded-full' /><div className='flex flex-col'><p className='font-semibold text-white-800'>{name}</p><p className='to-white-500 md:text-base text-sm'>{position}</p></div></div><div className='flex self-end items-center gap-2'>{Array.from({length: 5}).map((_, index) => (<img key={index} src='/assets/star.png' alt='star' className='w-5 h-5' />))}</div></div></div></div>))}</div></section>)
}export default Clients

在这里插入图片描述


🔠 下一篇预告:工作技能展示区域 + 任务模型制作 + 动作绑定

我们将在下一节中:

  • 🌟 构建个人工作技能区域(Work)
  • ✨ 将带你制作个人3D形象以及,为之搭配不同的动作,将所有动作与模型绑定
  • ⛳️ 实现鼠标移动不同技能标签,模型展示对应动作

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!!
我们下一节见!👋

http://www.xdnf.cn/news/4059.html

相关文章:

  • 51c大模型~合集124
  • TS 类型兼容性
  • 乡村饮用水厂无线网络规划与设计:融合 LoRaWAN、5G、Mesh 的分层异构方案
  • unity TMP字体使用出现乱码方框
  • 最长回文子串(动规 + 中心拓展)
  • 反转字符串2
  • 杰理-JL701-充电开机,芯片不进入休眠
  • Spring Boot 中 @Bean 注解详解:从入门到实践
  • 无人机 | 无人机设计概述
  • Springclound常用五大组件及其使用原理
  • 防止交叉验证中的数据泄露:提升模型在实际环境中的性能
  • 怎样获得真实带宽之宽带升级后
  • 014枚举之指针尺取——算法备赛
  • C++类与对象深度解析:从基础到应用
  • kotlin 01flow-StateFlow 完整教程
  • Python-numpy中ndarray对象创建,数据类型,基本属性
  • 【免费分享无广告】刷视频助手抖音快手小红书视频号自动脚本刷视频养号
  • 前端面试每日三题 - Day 25
  • Netty的内存池机制怎样设计的?
  • 专业化婴幼儿托育服务与管理实训室建设方案
  • Easy云盘总结篇-回收站
  • 组合两个表 --- MySQL [Leetcode 题目详解]
  • 备战全国信息素养大赛 图形化挑战赛——约数和
  • “公共类 XXX 应该在文件中出现”错误怎么查找解决
  • 项目管理学习-CSPM(1)
  • MCP与API集成的最佳实践:高效连接,智能驱动
  • 谈判模拟器 - Gemini 2.5 商业优化版
  • JGQ626Ⅲ数据采集旋风除尘与袋式除尘组合实验装置
  • 【漫话机器学习系列】241.典型丢弃概率(Typical Dropout Probabilities)
  • EF Core 中,AsEnumerable 和 AsQueryable 的区别