React开发实践(6)实战部分 Header 组件开发 1

简介: React开发实践(6)实战部分 Header 组件开发 1
  • 此处 以 简书为例子 实战一下 敲一敲

1、项目目录搭建 开始

1、新建一个 空的 react 项目 并清空 内容 npx create-react-app my-app-jianshu-react
2、注意 index.css 在 index.js 引入后其他部分也可使用,但css 样式可能产生冲突
3、解决上面那个问题 安装 css yarn add styled-components 
4、使用这个 东西 写全局样式 和组件自身样式 
5、为了统一在浏览器的表现形式,需要使用 reset.css https://meyerweb.com/eric/tools/css/reset/ 将这个网站的内容拿过来 
复制代码
  • 清理代码 只显示 hello

网络异常,图片无法展示
|

网络异常,图片无法展示
|

* 安装 yarn add styled-components 管理 css

  • 将原本的 index.css 更改为 style.js 并且在 index.js 中引入

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

2、Header 组件布局

1、新建文件夹 common
    2、文件夹内 加一个 header文件夹 创建 index.js 和 style.js
    3、在 index.js 引入使用 
    4、
    5、
复制代码
  • 等会儿 敲完

*style.js

网络异常,图片无法展示
|

  • index.js 此处 使用

网络异常,图片无法展示
|

  • 页面效果

网络异常,图片无法展示
|

  • 点击 这个 logo 图片 刷新本页面

网络异常,图片无法展示
|

将其他部分 补充一下

  • 值得注意的是 有时 为了扩充整个 width 需要设置 容器为 box-sizing: border-box

* style.js

import logoPic from "../../statics/logo.png";
export const HeaderWrapper = styled.div`
  position: relative;
  height: 56px;
  padding-bottom: 1px solid #f0f0f0;
`;
export const Logo = styled.a.attrs({ href: "/" })`
  position: absolute;
  top: 0;
  left: 0;
  display: block;
  width: 100px;
  height: 56px;
  background: url(${logoPic});
  background-size: contain;
`;
export const Nav = styled.div`
  width: 960px;
  height: 100%;
  background: pink;
  margin: 0 auto;
  padding-right: 70px;
  box-sizing: border-box;
`;
export const NavItem = styled.div`
  font-size: 17px;
  padding: 0 15px;
  cursor: pointer;
  line-height: 56px;
  &.left {
    float: left;
  }
  &.right {
    float: right;
    color: #969696;
  }
  &.active {
    color: #ea6f5a;
  }
`;
export const NavSearch = styled.input.attrs({ placeholder: "搜索" })`
  width: 160px;
  height: 38px;
  padding: 0 20px;
  background: #eee;
  border-radius: 19px;
  border: none;
  margin-top: 9px;
  font-size: 14px;
`;
export const Addition = styled.div`
  position: absolute;
  right: 0;
  top: 0;
  height: 56px;
`;
export const Button = styled.div`
  float: right;
  margin-right: 20px;
  line-height: 38px;
  margin-top: 9px;
  padding: 0 20px;
  border-radius: 19px;
  border: 1px solid #ea6f5a;
  &.reg {
    color: #ea6f5a;
  }
  &.write {
    background: #ea6f5a;
    color: #fff;
  }
`;
复制代码
  • header index.js
import {
  HeaderWrapper,
  Logo,
  Nav,
  NavItem,
  NavSearch,
  Addition,
  Button,
} from "./style";
class Header extends Component {
  constructor(props) {
    super(props);
    this.state = {};
  }
  render() {
    return (
      <>
        <HeaderWrapper>
          <Logo />
          <Nav>
            <NavItem className="left active">首页</NavItem>
            <NavItem className="left">下载APP</NavItem>
            <NavSearch></NavSearch>
            <NavItem className="right">登陆</NavItem>
            <NavItem className="right">Aa</NavItem>
          </Nav>
          <Addition>
            <Button className="write">写文章</Button>
            <Button className="reg">注册</Button>
          </Addition>
        </HeaderWrapper>
      </>
    );
  }
}
export default Header;
复制代码

*实现效果

网络异常,图片无法展示
|

3、使用 iconfont 嵌入头部图标

1、打开 iconfont.cn 登陆后 新建项目 
2、选择需要的东西 然后 下载到本地 (此处使用下载本地后改成在线链接 有点问题)
3、然后 在 src 下新建一个 iconfont 文件夹 将这些东西放进去 
4、然后 将.css 更改后缀为 .js 使用 styled 更改为全局样式
5、在index 中 引入样式 则可生效 
6、
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 引入 全局 iconfont

网络异常,图片无法展示
|

  • 页面上这种 形式使用

网络异常,图片无法展示
|

  • 注意这种两个东西的内外层定位

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 实现效果 非常 nice !

网络异常,图片无法展示
|

4、搜索框动画效果实现

1、首先 调整一下 输入框的内容和 搜索框的 间距
2、然后 react 当中 不要直接操作 dom 选择 数据驱动 视图变化
3、添加一个 state 为 isFocused 默认值为 false 
4、给 input 绑定 onChange 事件和 onBlur 事件 
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 此处有个小技巧先设置 isFocused 为 true 调整一下 效果

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 然后添加 事件驱动 改变 state

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 添加动画效果
1、使用 之前那个 动画库   yarn add react-transition-group
 2、引入后包裹需要动画的内容 input 上
 3、写属性
 4、写 样式 
 5、查看效果
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 当前页面 可以 看到 动画的过渡效果 非常的nice !

5、使用 react-redux 进行 页面数据管理  

  • 非常精彩的 redux 又来啦
1、yarn add redux           yarn add react-redux  (安装完 重启服务)
  2、目的是将组件内的 isFocused 放到 redux 中管理 
  3、首先 App 中需要 用 Provider 包裹 Header 组件 并 传入 store={store}
  这样 Provider 包裹的部分 就可拿到 store 的数据
  4、需要在组件内 使用 connect 方法 连接 使用数据 
  5、 注意 connect(mapStateToProps,mapDispatchToProps)(Header) 两个参数
  6、然后就是 经典的想更改 store 数据的流程  创建 action --> store.dispatch(action) --> store ---> (prevState, action) --> reducer --> newState --> store --> components
复制代码

* ok 我们开始敲一遍

* APP.js

网络异常,图片无法展示
|

  • store/index.js

网络异常,图片无法展示
|

  • store/reducer.js

网络异常,图片无法展示
|

  • 组件 Header.js

网络异常,图片无法展示
|

网络异常,图片无法展示
|

*redux 流程

网络异常,图片无法展示
|

  • 组件上面 原本的 this.state  都更改为 this.props

* 更新后的 reducer.js

网络异常,图片无法展示
|

  • 页面效果 非常的nice !
  • 此时发现 由于页面 没有 管理 state 状态 直接更改为 function组件

网络异常,图片无法展示
|

  • 非常nice !

6、使用 combinReducers 完成对数据的拆分管理

1、添加 dev tools 
    2、header 文件夹下 新建 store/reducer.js  index.js
    3、将之前的 reducer 内容 移动到 header 下面 reducer
    4、注意 此时层级结构 发生了改变  组件内 取 state 时 需要更改
    5、
复制代码
  • store index.js

网络异常,图片无法展示
|

  • store/reducer.js  index.js

网络异常,图片无法展示
|

网络异常,图片无法展示
|

*src/ store / reducer.js

网络异常,图片无法展示
|

  • 结构变更 页面 需要更改

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 非常 nice !

7、actionCreators 和 constants 的拆分

1、header 下 新建 actionCreators  constants
2、然后 将这两个引入 到 header 下的 store/index.js
3、这样在其他地方 引入 就变得更加的简单了
复制代码
  • 重点在于 index.js 这样写 使得 全部都简化了

网络异常,图片无法展示
|

  • actionCreators.js

网络异常,图片无法展示
|

* 常量管理 constants

网络异常,图片无法展示
|

  • 页面使用

网络异常,图片无法展示
|

网络异常,图片无法展示
|

  • 尝试效果后 非常 nice !

撒花 🎉🎉🎉

更多项目请访问 github  github.com/huanhunmao

gitee 项目地址 gitee.com/huanhunmao/…


相关文章
|
6月前
|
前端开发 API 数据库
React Server Components 实战:解锁高效渲染新姿势
React Server Components 实战:解锁高效渲染新姿势
261 81
|
7月前
|
前端开发 JavaScript 流计算
React 18 流式渲染:解锁极致性能优化实践
React 18 流式渲染:解锁极致性能优化实践
481 80
|
7月前
|
缓存 前端开发 安全
解锁下一代 React:Server Components 实战指南
解锁下一代 React:Server Components 实战指南
260 84
|
7月前
|
前端开发
React Hooks数据获取:避免内存泄漏的实战指南
React Hooks数据获取:避免内存泄漏的实战指南
|
5月前
|
人工智能 自然语言处理 前端开发
让AI学会"边做边想":ReAct的实战指南
还在为AI的「知其然不知其所以然」而烦恼?ReAct技术让AI不仅会思考,更会行动!通过模拟人类的思考-行动-观察循环,让AI从书呆子变身为真正的问题解决专家。几行代码就能构建智能Agent,告别AI幻觉,拥抱可追溯的推理过程!
|
6月前
|
前端开发 JavaScript 编译器
React编程新手入门实践教程
本书深入解析React核心思想与设计哲学,涵盖组件化思维、虚拟DOM原理及JSX本质,探讨函数组件与类组件特性,详解状态管理、生命周期控制及事件处理机制,帮助开发者掌握高效构建用户界面的技巧。
200 1
|
8月前
|
运维 前端开发 数据可视化
【CodeBuddy】挑战一句话开发一个完整项目之:React表单验证系统
本文分享了一个基于React 19构建的用户注册表单系统,采用模块化CSS和状态驱动视图更新,实现实时校验、错误提示与提交反馈等功能。核心亮点包括验证规则引擎(如密码复杂度校验)、交互反馈体系(输入框警示、按钮禁用)及加载动画优化。通过函数式更新确保状态同步,正则表达式实现多条件验证,CSS伪元素打造流畅体验。代码结构清晰,可扩展性强,适合作为React表单开发模板。文末附CodeBuddy免费下载链接,助力高效开发!
223 1
【CodeBuddy】挑战一句话开发一个完整项目之:React表单验证系统
|
8月前
|
JSON 前端开发 算法
掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力
掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力
561 23
|
3月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
8月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
301 68