React Next 项目初体验

项目背景

国际化官网vue

项目结构

|-- .next  
|-- components --------------- 组件
|-- lang --------------------- 多语言
|-- pages -------------------- 页面
|-- scripts ------------------ 脚本文件
|-- static ------------------- 静态资源
|-- utils -------------------- 自定义或其余库以及封装文件
|-- .babelrc
|-- .eslintignore
|-- .eslintrc
|-- .gitignore
|-- .prettierrc
|-- next.config.js
|-- package.json
|-- prettier.config.js
|-- README.md
|-- server.js
|-- yarn.lock

项目搭建

多语言:react-intl

样式:起初使用的是 jss,后来改为了引入外部样式文件react

http 请求:data-fetchgit

UI 库:antd-design-lessgithub

路由:withRouterexpress

全部示例均参考自 next 官方json

踩坑

痛点:babel

  1. 国际化语言切换
  2. 自定义字体不生效
  3. 样式使用 import 引入到对应 jsx 文件,发布到生产环境以后样式不立马生效
  4. antd-design 表单样式发布到生产环境同上

填坑

  1. 最终采用将语言做为路由查询参数,跳转时带向各页面,配合使用 Ant Design 的 ConfigProvider
  2. 自定义样式配置
  3. 在 next.config.js 文件中增长用户自定义样式配置代码antd

    const themeVariables = lessToJS(fs.readFileSync(path.resolve(__dirname, './static/style/antd-custom.less'), 'utf8'));

    不在单个文件中引入相应的样式文件,而是把样式文件都在用户自定义样式文件先引入less

  4. 在 .babelrc 文件将 antd 库做为插件(plugins)引入,在 static 文件夹下新建 style 文件夹(存放样式文件),新建 index.less 文件,在文件中引入 antd 样式frontend

    @import '~antd/dist/antd.less';
  5. 生产环境发起请求须要,设置反向代理(express)

GET

获取当前 URL 参数:在钩子 componentDidMount 里面获取
```

componentDidMount() {
    const search = window.location.search;
    console.log(search); // 获取 url ? 后带的参数
}

```

注意

不要自定义静态文件夹的名字,只能叫 static ,由于只有这个名字 Next.js 才会把它看成静态资源。(出自文档: next文档

Ending

看过那么多别人写的 react 项目,这是第一个本身上手的实战项目,还用到了 next.js 作服务端渲染。虽然项目很简单,几乎纯展现,难度系数较低,但对于 react 入门级小白而言,第一次参与 react 实战,仍是从零到一本身搭建(固然,期间有大佬相助),仍是能有所收获。

由于以前写 vue 项目的时候学到了该如何的划分组件,怎么定义组件,因此对于页面和组件拆分几乎没有问题。这次实战,对 jsx 语法有了更进一步的了解,可是对 react 的生命周期还不是很了解,至少没有在这次项目中体现。对于组件间的传值,会用大于理解。对于 react 高阶组件,有待深刻体验。

相关文章
相关标签/搜索