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

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

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

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


🌟 项目特性概览

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

📂 数据来源

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

js 复制代码
{
      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 形成。每条评论包括三大块内容:评论内容、用户信息、星级评分:

js 复制代码
{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:用于格式化用户头像+信息和星级应符层

例如:

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

📍 Clients.jsx全部代码

html 复制代码
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形象以及,为之搭配不同的动作,将所有动作与模型绑定
  • ⛳️ 实现鼠标移动不同技能标签,模型展示对应动作

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

我们下一节见!👋

相关推荐
kyriewen7 小时前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程
段一凡-华北理工大学7 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe8 小时前
C++——多态
开发语言·c++
心平气和量大福大8 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_10 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸10 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
GIS阵地10 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
yaoxin52112311 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
groundhappy11 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
gis开发之家12 小时前
《Vue3 从入门到大神35篇》Vue3 源码详解(五):effect 依赖收集原理——track 与 trigger 是如何工作的?
javascript·typescript·前端框架·vue3·vue3源码