学习react-环境&手脚架&页面&路由

1. 搭建环境

  1. 安装node和npm

在下面网址下载node,并安装

bash 复制代码
https://nodejs.cn/
#检测是否ok
node -v
npm -v
  1. 安装react
bash 复制代码
npm install -g create-react-app

2. 创建手脚架(TypeScript)

bash 复制代码
create-react-app my-app  --template typescript
cd my-app
npm start

3.页面结构

4.引入Router

bash 复制代码
npm install react-router-dom typescript

5.创建页面

创建HomePage页面:HomePage.tsx和HomeMeta.tsx

javascript 复制代码
// HomeMeta.tsx
export type HomeProp={
    name:string;
}

export type HomeState={
    count:number;
}
javascript 复制代码
// HomePage.tsx
class HomePage extends Component<HomeProp, HomeState> {
    constructor(props: HomeProp) {
        super(props);
        this.state = { count: 0 };
     }

    render() {
        const { name } = this.props; //解构赋值
      return <h1>Hello, {name}!</h1>;
    }
  }
  
  export default HomePage;  

创建LoginPage页面:LoginPage.tsx和LoginMeta.tsx

javascript 复制代码
// LoginMeta.tsx
export interface LoginProp{
    name:string;
}

export interface LoginState{
    count:number;
}
javascript 复制代码
// LoginPage.tsx
class LoginPage extends Component<LoginProp, LoginState> {

    constructor(props: LoginProp) {
        super(props);
        this.state = { count: 0 };
     }
    
    render() {
      return <h1>Hello, {this.props.name}!</h1>;
    }
  }
  
  export default LoginPage;

创建NotFoundPage.tsx和Meta.tsx

javascript 复制代码
// Meta.tsx
export interface MetaProp{
    name:string;
}

export interface MetaState{
    count:number;
}
javascript 复制代码
class NotFoundPage extends Component<MetaProp, MetaState> {

    constructor(props: LoginProp) {
        super(props);
        this.state = { count: 0 };
     }
    
    render() {
      return <h1>Hello, {this.props.name}!</h1>;
    }
  }
  
  export default NotFoundPage;

6.配置路由

在Index.tsx配置HashRouter

javascript 复制代码
const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <HashRouter>
      <App />
    </HashRouter>
    
  </React.StrictMode>
);
javascript 复制代码
// App.tsx
function App() {
  return (
    <div className="App">
        <Routes>
            <Route path="/" element={<HomePage name='test' />} />
            <Route path="login" element={<LoginPage name='login'/>} />
            <Route path="*" element={<NotFoundPage name='not found'/>} />
        </Routes>
     
    </div>
  );
}
// App.css
.App {
  text-align: center;
}

输入:

http://localhost:3000/#login 跳到login页

http://localhost:3000/#ttt 跳到not found page

http://localhost:3000 跳到HomePage

7.路由配置文件分离

创建Router.tsx

javascript 复制代码
//  Router.tsx
const routes: RouteObject[] = [
    {
        path: '/',
        element:<HomePage name={"test"} /> //<Navigate to='home/one' /> // 重定向
    },
    {
        path: 'login',
        element: <LoginPage name={"login"} />
    },
    // 未匹配到页面
    {
        path: '*',
        element: <NotFoundPage name={"notfound"} />
    }
]
export default routes;

使用Router.tsx

javascript 复制代码
// App.tsx
function App() {
  const element = useRoutes(routes);
  return (
    <div className="App">
     {element}
    </div>
  );
}

输入:

http://localhost:3000/#login 跳到login页

http://localhost:3000/#ttt 跳到not found page

http://localhost:3000 跳到HomePage

相关推荐
BillKu6 分钟前
scss(sass)中 & 的使用说明
前端·sass·scss
qq_454175797 分钟前
c++学习-this指针
开发语言·c++·学习
疯狂的沙粒10 分钟前
uni-app 项目支持 vue 3.0 详解及版本升级方案?
前端·vue.js·uni-app
恰薯条的屑海鸥19 分钟前
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
网络·学习·安全·web安全·渗透测试·csrf·网络安全学习
Jiaberrr19 分钟前
uniapp Vue2 获取电量的独家方法:绕过官方插件限制
前端·javascript·uni-app·plus·电量
哆啦A梦的口袋呀44 分钟前
基于Python学习《Head First设计模式》第六章 命令模式
python·学习·设计模式
谢尔登1 小时前
【React】React 18 并发特性
前端·react.js·前端框架
Joker`s smile1 小时前
使用React+ant Table 实现 表格无限循环滚动播放
前端·javascript·react.js
国家不保护废物1 小时前
🌟 React 魔法学院入学指南:从零构建你的第一个魔法阵(项目)!
前端·react.js·架构
然我1 小时前
从原生 JS 到 React:手把手带你开启 React 业务开发之旅
javascript·react.js·前端框架