MENU

征途所在即是星辰大海

React18路由表使用

安装依赖

npm i react-router-dom

配置路由表

import Home from '@/views/Home'
import React, { lazy } from 'react'
import { Navigate } from 'react-router-dom'
const About = lazy(() => import('@/views/About'))
const User = lazy(() => import('@/views/User'))
const routes = [
  {
    path: '/',
    element: <Navigate to="/home" />
  },
  {
    path: '/home',
    element: <Home />
  },
  {
    path: '/about',
    element: routeWithLoading(<About />)
  },
  {
    path: '/user',
    element: routeWithLoading(<User />)
  }
]
export default routes
function routeWithLoading(component: JSX.Element) {
  return <React.Suspense fallback={<div>Loading...</div>}>{component}</React.Suspense>
}

修改 main.tsx

import { BrowserRouter } from 'react-router-dom'

ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
)

修改 App.tsx

import { useState } from 'react'
import router from './router'
import { useRoutes, Link } from 'react-router-dom'
function App() {
  const outlet = useRoutes(router)
  return (
    <div className="App">
      <Link to="/home">Home</Link>
      <Link to="/about">About</Link>
      <Link to="/user">User</Link>
      {outlet}
    </div>
  )
}

export default App

Flutter几个常用animations组件动画

Animations几个常用组件动画

页面打开动画

OpenContainer(
            transitionType: ContainerTransitionType.fade,
            openBuilder: (BuildContext context, VoidCallback _) {
              return const _DetailsPage();
            },// 打开的页面
            // onClosed: onClosed, // 关闭动作
            // tappable: false, // 动画打断
            closedBuilder: (BuildContext _, VoidCallback openContainer) {
              return InkWell(
                onTap: openContainer,
                child: FlutterLogo(size: 100),
              );
            }, // 关闭时的样子,需要一手势事件包裹
          )

淡出淡入切换页面动画

PageTransitionSwitcher(
        transitionBuilder: (
          Widget child,
          Animation<double> animation,
          Animation<double> secondaryAnimation,
        ) {
          return FadeThroughTransition(
            animation: animation,
            secondaryAnimation: secondaryAnimation,
            child: child,
          );
        },
        child: pageList[pageIndex], // 页面更改时播放动画
      ),

共享方向轴的过渡

PageTransitionSwitcher(
          reverse: false,
          transitionBuilder: (
            Widget child,
            Animation<double> animation,
            Animation<double> secondaryAnimation,
          ) {
            return SharedAxisTransition(
              animation: animation,
              secondaryAnimation: secondaryAnimation,
              transitionType: SharedAxisTransitionType.horizontal!,
              child: child,
            );
          },
          child: page2(), // 页面改变,播放动画
        ),

样式不错的输入框

TextField(
                    decoration: InputDecoration(
                      suffixIcon: Icon(
                        Icons.visibility,
                        size: 20,
                        color: Colors.black54,
                      ),
                      isDense: true,
                      labelText: 'Email or phone number',
                      border: OutlineInputBorder(),
                    ),
                  ),

设置全局转场动画

MaterialApp(
      theme: ThemeData.from(
        colorScheme: const ColorScheme.light(),
      ).copyWith(
        pageTransitionsTheme: const PageTransitionsTheme(
          builders: <TargetPlatform, PageTransitionsBuilder>{
            TargetPlatform.android: ZoomPageTransitionsBuilder(),
          },
        ),
      ),
      home: _TransitionsHomePage(),
    ),

Express Session的使用

一、关于session

session是另一种记录客户状态的机制,与cookie保存在客户端浏览器不同,session保存在服务器当中;
当客户端访问服务器时,服务器会生成一个session对象,对象中保存的是key:value值,同时服务器会将key传回给客户端的cookie当中;当用户第二次访问服务器时,就会把cookie当中的key传回到服务器中,最后服务器会吧value值返回给客户端。
因此上面的key则是全局唯一的标识,客户端和服务端依靠这个全局唯一的标识来访问会话信息数据。

Read More

Express Cookie加密

一、关于cookie加密

cookie加密是让客户端用户无法的获取cookie明文信息,是数据安全的重要部分;一般的我们可以在保存cookie时对cookie信息进行加密,或者在res.cookie中对option对象的signed属性设置设置成true即可。

Read More

Express Cookie的使用

一、关于Cookie

在我们关闭一个登录过的网址并重新打开它后,我们的登录信息依然没有丢失;当我们浏览了商品后历史记录里出现了我们点击过的商品;当我们推回到首页后,推荐商品也为我们选出了相似物品;事实上当我们有过此类操作后,浏览器会将我们的操作信息保存到cookie上面。阿进而言之,cookie就是储存在用户本地终端上的数据。

Read More