{"id":25506331,"url":"https://github.com/juwenzhang/byte_react_airbnb","last_synced_at":"2026-04-11T02:02:17.794Z","repository":{"id":276446682,"uuid":"927927575","full_name":"juwenzhang/byte_react_airbnb","owner":"juwenzhang","description":"react project","archived":false,"fork":false,"pushed_at":"2025-02-17T20:13:13.000Z","size":5888,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-17T21:25:07.330Z","etag":null,"topics":["ant-design","axios-react","cargo","devops","fakerjs","front-end-development","less","mockjs","mui","react","react-hooks","react-router","reactjs","redux","redux-thunk","redux-toolkit","webpack"],"latest_commit_sha":null,"homepage":"https://juwenzhang.github.io/byte_react_airbnb/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juwenzhang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-05T19:15:44.000Z","updated_at":"2025-02-17T20:12:09.000Z","dependencies_parsed_at":"2025-02-08T10:19:12.701Z","dependency_job_id":"5a5d5f47-1818-436d-8791-4d9e8dc9e4e4","html_url":"https://github.com/juwenzhang/byte_react_airbnb","commit_stats":null,"previous_names":["juwenzhang/byte_react_airbnb"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juwenzhang%2Fbyte_react_airbnb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juwenzhang%2Fbyte_react_airbnb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juwenzhang%2Fbyte_react_airbnb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juwenzhang%2Fbyte_react_airbnb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juwenzhang","download_url":"https://codeload.github.com/juwenzhang/byte_react_airbnb/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239609832,"owners_count":19668033,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ant-design","axios-react","cargo","devops","fakerjs","front-end-development","less","mockjs","mui","react","react-hooks","react-router","reactjs","redux","redux-thunk","redux-toolkit","webpack"],"created_at":"2025-02-19T06:30:20.684Z","updated_at":"2025-11-15T18:30:13.493Z","avatar_url":"https://github.com/juwenzhang.png","language":"JavaScript","readme":"## Byte_React_Airbnb 项目介绍\n\n---\n### 创建项目\n* 主要使用的是 create-react-app 来进行的创建项目的\n  * `npm install create-react-app -g`  进行全局安装依赖\n  * `create-react-app byte_react_airbnb`\n\n---\n### 项目配置文件\n* 配置项目的 icon --- 这个就是配置项目加载的网页图标的\n* 配置项目标题 --- 这个就是用来实现的是配置项目的首次渲染标题的\n* 配置项目的 jsconfig.json --- 为了让我们的开发更加的便捷，高效的\n* 使用 craco 配置文件别名@ 和 less文件配置\n  * `npm install @craco/craco craco-less --save-dev`\n  * `craco.config.js`\n    * 该文件是可以和我们的原本的 webpack 或者说 vite 的配置结合使用的\n    * react 项目中如果想要看到 webpack 的配置，就需要执行一个不可逆的操作 `npm run eject`\n    * 但是不推荐，所以说就使用我们的 craco 来实现间接性的修改 webpack 的配置的呐\n    * 最后将我们的脚本文件启动方式换为 craco \u003c-- react-scripts\n  * `npm install --save-dev less-loader less`\n* 注意，只要是修改了配置文件，项目就要重新运行一次，否则看不到效果的，呜呜呜，害惨我啦！！！\n\n---\n### 项目目录结构划分\n* src/assets 存放静态资源目录\n* src/base-ui 存放的是被多次使用的组件目录\n* src/components 存放的是简单的组件目录\n* src/hooks 自定义的一些 hooks 函数目录\n* src/router 项目路由映射目录\n* src/services 网络请求源码目录\n* src/store 状态管理的数据目录\n* src/utils 工具封装目录\n* src/views 路由组件目录\n* src/faker 模拟数据的函数\n\n---\n### CSS 样式重置\n* 在我们的开发前我们需要的就是对我们的样式进行重置吧\n* 不重置的话，后期开发中是会遇到很多的问题的\n* 所以说我们就需要进行样式的重置\n* 主要是使用我们的 normalize.css 文件的\n  * `npm install normalize.css`\n  * `import \"normalize.css\"`\n* 同时自己如果需要其他的配置文件的话也是可以自定义配置样式的呐\n  * `reset.css`\n\n---\n### router 配置\n* `npm install react-router-dom`\n  * 首先先在我们的 index.jsx 中开启 hash 或者 history 模式的路由\n    * HashRouter 或者说 BrowserRouter 组件，将下面的组件进行包裹起来\n  * 然后进行在我们的 router 目录中进行对应的路由配置吧\n    * 再在需要进行使用的地方结合 useRoutes 使用即可\n* 页面的懒加载 React.lazy 和 Suspense 结合使用，异步加载即可\n```javascript\nimport React, { Suspense } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { HashRouter } from \"react-router-dom\"\n\nimport App from \"./App\";\nimport \"normalize.css\"\nimport \"./assets/css/index.less\"\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  \u003cReact.StrictMode\u003e\n    \u003cSuspense fallback=\"loading...\"\u003e\n        \u003cHashRouter\u003e\n            \u003cApp/\u003e\n        \u003c/HashRouter\u003e\n    \u003c/Suspense\u003e\n  \u003c/React.StrictMode\u003e\n)\n```\n```javascript\nimport react from \"react\";\nimport { Navigate } from \"react-router-dom\";\n\n// 实现页面的懒加载\nconst Home = react.lazy(() =\u003e import(\"../views/home\"));\nconst Entire = react.lazy(() =\u003e import(\"../views/entire\"))\nconst Detail = react.lazy(() =\u003e import(\"../views/detail\"))\n\nexport const routes = [\n    {\n        // 配置重定向\n        path: \"/\",\n        element: \u003cNavigate to=\"/home\" replace/\u003e,\n    },\n\n    {\n        path: \"/home\",\n        element: \u003cHome/\u003e,\n    },\n\n    {\n        path: \"/entire\",\n        element: \u003cEntire/\u003e,\n    },\n\n    {\n        path: \"./detail\",\n        element: \u003cDetail/\u003e,\n    }\n]\n```\n```javascript\nimport { useRoutes } from \"react-router-dom\";\nimport { routes } from \"./router/index\";\nimport { memo } from \"react\";\n\nconst App = memo(() =\u003e {\n    return (\n        \u003cdiv className=\"App\"\u003e\n            \u003cdiv className=\"header\"\u003eheader\u003c/div\u003e\n            \u003cdiv className=\"content\"\u003e\n                { useRoutes(routes) }\n            \u003c/div\u003e\n            \u003cdiv className=\"footer\"\u003efooter\u003c/div\u003e\n        \u003c/div\u003e\n    )\n})\nexport default App;\n```\n\n---\n### redux 状态管理配置\n* `npm install @reduxjs/toolkit react-redux`\n  * @reduxjs/toolkit 就是帮助我们实现的是 react 开发状态管理的时候类似于 pinia 的使用\n  * react-redux 就是实现的是我们的将 react 组件和 redux 结合起来的第三方库吧\n* 使用流程\n  * 和我们的路由差不多\n    * 都是先书写对应的配置部分\n    * 然后实现对 src/index.jsx 进行内置组件包裹的部分\n    * 最后才是在组件中可以正常使用的部分了\n```javascript\n// 使用我们的 toolkit 的开发模式\n// 通过 toolkit 创建的 slice store 片段\nimport { createSlice } from \"@reduxjs/toolkit\"\n\nconst homeSlice = createSlice({\n    name: \"home\",\n    initialState: {\n\n    },\n    reducers: {\n\n    }\n})\nexport default homeSlice.reducer\n```\n```javascript\n// 原本的 redux 开发中含有四个文件的\n// 一个是我们的汇总文件 index\n// 一个是我们的 reducer 文件\n// 一个是我们的 constant 常量文件\n// 一个是我们的 createAction 创建事件的文件\n```\n\n---\n### 网络请求配置 axios \n* 网络请求的话含有我们的 axios | Native-Ajax | fetch \n  * 时用的最多的就是我们的 axios 了\n  * `npm install axios`\n* 但是为了降低我们的项目对 axios 第三方库的依赖程度\n  * 我们是需要进行二次封装后使用的，降低耦合度吧\n\n---\n### base-ui \n* 含有对 ant-design 或者 material-ui 的二次封装\n  * 欢迎各位前端开源爱好者的提交 pr\n\n--- \n### 项目介绍\n* 该项目主要使用了 react、redux、fakerJs、axios、react-redux、redux-toolkit、ant-design、material-ui\n  * 同时由于后端接口的原因，引入了 fakerJS 来实现前端自行模拟数据，所以说是一个全面的脱离了后端的纯前端静态面\n    * 为什么模拟数据不选择 mock-server 或者 json-server呐\n      * 原因在于使用 mock-server 的话会导致在开发过程中要不断的启动 mock-server 来实现一些效果\n      * 然后使用 fakerJs 的话在代码是可以控制自己的数据模板的，同时也很好的使用 try...catch 语句来实现控制\n      * 所以说就是选择的 fakerJs 工具，同时在未来的工作中也是可以大量使用的呐\n* 同时使用 cargo 配置来实现我们的修改 webpack 配置\n  * 在通过 create-react-app 脚手架中，webpack 的配置是隐藏的\n  * 虽然提供了 `npm run eject` 命令，\n  * 但是还是十分不妥当的呐，因为这个命名是不可逆的，所以说就通过 cargo 来间接性的修改 webpack 配置了\n\n---\n### 项目开发规范\n\u003e * 文件夹，文件名统一小写，多个单词使用连接符 - 连通\n\u003e * JavaScript 变量使用小驼峰命名，组件名使用大驼峰命名\n\u003e * CSS 采用 style-component 来实现的编写的\n\u003e   * npm install styled-components\n\u003e * 函数式组件的定义一定使用纯组件，使用 memo 进行包裹\n\u003e * 组件内部的书写规范\n\u003e   * 组件内部的 state 管理\n\u003e   * redux 的 hooks 代码\n\u003e   * 其他相关的 hooks API\n\u003e   * 返回我们的 JSX 代码\n\u003e * store 的定义全面使用 redux-toolkit 的开发模式\n\u003e * 网络请求 axios 使用二次封装后的请求 axios 工具\n\u003e * 组件库使用 ant-design 和 mui，同时对组件进行二次封装使用，\n\u003e   * 尽量不要直接使用组件库的 ui\n\u003e * 全面的使用 devOps 开发模式了\n\u003e * 同时需要对一些函数进行抽取\n\u003e   * 通过一系列的抽取，本项目的有些代码的可复用性还是蛮强的\n\u003e   * 在每一个组件里面只需要进行调用对象的 API 接口即可\n\n---\n### 该静态前端界面存在的问题\n* 还需要等待最后的 TypeScript 的整体重构\n* 但是项目已经成型了，所以说重构的话还需要很大的时间\n* 或许说时间是我程序员时间的一辈子吧","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuwenzhang%2Fbyte_react_airbnb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuwenzhang%2Fbyte_react_airbnb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuwenzhang%2Fbyte_react_airbnb/lists"}