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

网站建设猫腻公司官网网站建设

网站建设猫腻,公司官网网站建设,wordpress多站点多模板,wordpress图片剪切第4课:列表渲染与条件渲染 学习目标 掌握列表渲染的进阶技巧理解key属性的核心作用灵活运用多种条件渲染方式优化任务列表的交互体验 一、列表渲染优化实践 1. 复杂数据结构渲染 更新App.js中的初始状态: const [tasks, setTasks] useState([{id: …

第4课:列表渲染与条件渲染

学习目标

  • 掌握列表渲染的进阶技巧
  • 理解key属性的核心作用
  • 灵活运用多种条件渲染方式
  • 优化任务列表的交互体验

一、列表渲染优化实践

1. 复杂数据结构渲染

更新App.js中的初始状态:

const [tasks, setTasks] = useState([{id: 1,title: '学习React基础',description: '完成组件和状态管理学习',completed: false,priority: 'high',category: '学习'},{id: 2,title: '项目会议',description: '下午3点团队进度同步',completed: true,priority: 'medium',category: '工作'}
]);

2. 增强型TaskCard组件

function TaskCard({ task, onToggle, onDelete }) {const getPriorityColor = () => {switch(task.priority) {case 'high': return '#ff4444';case 'medium': return '#ffbb33';default: return '#00C851';}};return (<div className={`task-card ${task.completed ? 'completed' : ''}`}><div className="task-header"><span className="priority-dot" style={{ backgroundColor: getPriorityColor() }}/><h3>{task.title}</h3><span className="category-tag">{task.category}</span></div><p className="task-description">{task.description}</p><div className="task-footer"><button onClick={onToggle}className={`status-btn ${task.completed ? 'completed' : ''}`}>{task.completed ? '✅ 已完成' : '⏳ 进行中'}</button><button onClick={onDelete}className="delete-btn">🗑️ 删除</button></div></div>);
}

3. Key的重要性示例

错误示例:

{tasks.map((task, index) => (<TaskCard key={index} task={task} />
))}

正确实践:

{tasks.map(task => (<TaskCard key={task.id}task={task}onToggle={() => toggleTask(task.id)}onDelete={() => deleteTask(task.id)}/>
))}

为什么重要:

  • 帮助React识别元素变化
  • 维持组件状态稳定性
  • 提升列表更新性能

二、条件渲染的四种方式

1. && 运算符

{!tasks.length && (<div className="empty-state"><img src="/empty.svg" alt="空状态" /><p>暂时没有任务,添加一个吧!</p></div>
)}

2. 三元表达式

<div className="task-stats">总计任务: {tasks.length}{tasks.length > 0 ? (<span>(已完成: {tasks.filter(t => t.completed).length})</span>) : null}
</div>

3. 组件外返回

function TaskList({ tasks }) {if (!tasks.length) {return <EmptyState />;}return (<div className="task-list">{tasks.map(task => (<TaskCard key={task.id} task={task} />))}</div>);
}

4. 枚举对象

const priorityLabels = {high: { text: '紧急', color: 'red' },medium: { text: '一般', color: 'orange' },low: { text: '低', color: 'green' }
};// 在组件中使用
<span style={{ color: priorityLabels[task.priority].color }}>{priorityLabels[task.priority].text}
</span>

三、实战:增强任务列表

1. 添加过滤功能

function App() {const [filter, setFilter] = useState('all');const filteredTasks = tasks.filter(task => {if (filter === 'completed') return task.completed;if (filter === 'active') return !task.completed;return true;});return (<div className="App"><div className="filters"><button className={filter === 'all' ? 'active' : ''}onClick={() => setFilter('all')}>全部 ({tasks.length})</button><buttonclassName={filter === 'active' ? 'active' : ''}onClick={() => setFilter('active')}>未完成 ({tasks.filter(t => !t.completed).length})</button><buttonclassName={filter === 'completed' ? 'active' : ''}onClick={() => setFilter('completed')}>已完成 ({tasks.filter(t => t.completed).length})</button></div><TaskList tasks={filteredTasks} /></div>);
}

2. 样式优化 (App.css)

/* 过滤按钮 */
.filters {display: flex;gap: 10px;margin-bottom: 20px;
}.filters button {padding: 8px 16px;border: 1px solid #ddd;border-radius: 20px;background: white;cursor: pointer;transition: all 0.3s;
}.filters button.active {background: #2196F3;color: white;border-color: #2196F3;
}/* 空状态 */
.empty-state {text-align: center;padding: 40px;opacity: 0.6;
}.empty-state img {width: 150px;margin-bottom: 20px;
}/* 任务卡片增强 */
.task-header {display: flex;align-items: center;gap: 10px;margin-bottom: 12px;
}.priority-dot {width: 10px;height: 10px;border-radius: 50%;
}.category-tag {background: #e0e0e0;padding: 2px 8px;border-radius: 4px;font-size: 0.8em;
}.task-footer {display: flex;justify-content: space-between;align-items: center;margin-top: 15px;
}.delete-btn {background: none;border: none;color: #ff4444;cursor: pointer;transition: transform 0.2s;
}.delete-btn:hover {transform: scale(1.1);
}/* 动画效果 */
.task-card {transition: transform 0.3s, box-shadow 0.3s;
}.task-card:hover {transform: translateY(-2px);box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}

四、练习任务

  1. 实现分类过滤功能:

    • 添加「工作」「学习」「生活」分类筛选
    • 显示每个分类的任务数量
    • 支持多选过滤
  2. 增强空状态提示:

    • 不同过滤状态显示不同的提示文案
    • 添加「新建任务」按钮到空状态区域
  3. 实现动画删除效果:

    • 点击删除时添加渐出动画
    • 使用CSS transition或react-transition-group
  4. (挑战)添加排序功能:

    • 支持按优先级排序
    • 支持按创建时间排序
    • 在卡片上显示创建时间

五、常见问题解答

Q: 为什么列表项会出现奇怪的重绘行为?
A: 检查:

  1. key是否稳定唯一
  2. 是否直接修改了状态数组
  3. 组件是否做了不必要的重新渲染

Q: 条件渲染导致布局跳动怎么办?
A: 解决方法:

  1. 使用CSS opacity过渡
  2. 保持DOM结构稳定(用空元素占位)
  3. 使用动画库处理过渡效果

Q: 如何处理复杂的条件组合?
A: 推荐方案:

  1. 提前计算渲染条件
  2. 使用策略模式封装条件判断
  3. 考虑使用useMemo优化计算

六、课程总结

本节重点:

  • 列表渲染的key最佳实践
  • 四种条件渲染模式的应用场景
  • 复杂数据结构的可视化呈现
  • 交互体验的全面优化

能力提升:

  • 列表性能优化意识
  • 条件逻辑的优雅处理
  • 用户反馈的视觉设计

课后作业

  1. 完成分类过滤功能的实现
  2. 为任务添加创建时间字段并显示
  3. 尝试使用CSS Grid实现响应式任务列表布局

附加资源

  • React列表渲染官方指南
  • key的重要性深度解析
  • CSS过渡动画教程
  • react-transition-group文档
# 保存当前进度
git add .
git commit -m "feat: 完成列表渲染与条件渲染优化"

文章转载自:

http://zRKzJMOh.dxsyp.cn
http://14Vll0hr.dxsyp.cn
http://Emk0X9a6.dxsyp.cn
http://DO3iep39.dxsyp.cn
http://q3e0FUD1.dxsyp.cn
http://laAArBBZ.dxsyp.cn
http://dm70S8ft.dxsyp.cn
http://gCHtKR1o.dxsyp.cn
http://m3WA6GMn.dxsyp.cn
http://QOYZkCkL.dxsyp.cn
http://mTcHrU3a.dxsyp.cn
http://qdNAt9Kj.dxsyp.cn
http://wxDmeQ66.dxsyp.cn
http://jBgWxeSm.dxsyp.cn
http://r4HoIGcZ.dxsyp.cn
http://arEGdZFR.dxsyp.cn
http://qsZTjFad.dxsyp.cn
http://hOHWLLXR.dxsyp.cn
http://ZkErpBBU.dxsyp.cn
http://PYEMRf4e.dxsyp.cn
http://IrHOceZf.dxsyp.cn
http://WMcOwv14.dxsyp.cn
http://uyO3bNev.dxsyp.cn
http://aOXtQm5W.dxsyp.cn
http://YhzzvxyI.dxsyp.cn
http://tAGS4oSI.dxsyp.cn
http://jEF2eAjm.dxsyp.cn
http://sMJHuqBt.dxsyp.cn
http://EFprSm2s.dxsyp.cn
http://QkgccfY2.dxsyp.cn
http://www.dtcms.com/wzjs/656892.html

相关文章:

  • 网站安全检测官网泰安房产信息网网签查询
  • 推广的网站需要备案吗网站开发 只要
  • 网站备案代码如何加到四川省住房和建设厅网站
  • 润商网站建设服务网站设计制作电影
  • 网站架构图图鞍山吧
  • 网站兼容所有浏览器wordpress 上线到centos
  • 网站服务器慢网站展现形式
  • 火车票网站开发wordpress平铺图片
  • 天津做网站要多少钱做游戏奖金不被发现网站
  • 重庆网站建设选夹夹虫wordpress路由插件开发
  • 阜阳做网站公司王也道长高清头像黑白
  • php英文网站源码手机图片网站源码
  • 烟台优化网站手机oa办公系统
  • 免费个人网站建设有一个网站 人物模型可以做各种动作
  • php网站开发实训报告书wordpress默认中文
  • 网站开发要什么开一个素材设计网站怎么做的
  • 哪些网站做机票酒店有优势乌海网站开发
  • 人才招聘网站建设方案安徽省住房和城乡建设厅网站查询
  • 做网站前期构架图在凡科做的网站怎么推广
  • 网站轮播广告天津网站建设电焊机
  • cms网站建设有多少条数据对网站内容建设的建议
  • 班级网站网页设计建设企业网站都需要啥
  • 灌南县城乡建设局网站注册一个互联网公司需要多少钱
  • 陵水网站建设装修设计公司自己做网站做外贸可以吗
  • 网站建设营销推广网络营销活动策划方案模板
  • 网站 竞争分析wordpress 关键字插件
  • 大气宽屏企业网站源码筹备网站建设
  • 南昌企业网站开发公司会昌网站
  • 楚天网站建设合同域名创建
  • 网站 用什么数据库门户网站需要哪些人