类型“Window & typeof globalThis”上不存在属性“REDUX_DATA”。

Redux Toolkit 做SSR, preloadState 上访问不到window

  1. const preloadedState = window.REDUX_DATA;
  2. ^
  3. ReferenceError: window is not defined

打包之后,运行服务端代码的时候就有这个,而且我已经关闭了SSR的controller,应该是不会去访问打包后的文件然后做操作的
// TODO

webapck-dev-sever

当我把配置文件集中到config目录下的时候(使用不同的配置文件),使用webpack打包或者webpack serve的时候要指定配置文件位置

ts 项目中使用 css modules

Globals.d.ts

自定义组件获得React的合成事件

我们封装一个组件,比如我们封装了一个Button,如果想在这个组件上onClick,那么就得在封装的组件里面传入React.ButtonHTMLAttributes这样就能获得React button上的属性了,然后在原始button上要传入{…restProps},把所有属性传给它

  1. const Button: React.FC<React.ButtonHTMLAttributes<HTMLElement>> = ({
  2. children, ...rest
  3. }) => {
  4. return <button {...rest}>{children}</button>;
  5. };

CSS modules在React中通过条件判断

  1. className={styles['one'] + ' ' + styles[条件 ? 'two' : 'three']}
  2. // 普通
  3. className={'one' + ' ' + (条件 ? 'two' : 'three')}

CSS Modules设置全局:global之后,使用这个样式得用普通css的方式,不能用styles.或者styles[]

vite中使用antd的配置

获取当前ip地址

首先发现了几个接口,但是通过XMLHttpRequest会报跨域问题
于是以为是localhost的原因,然后以为是内网和外网的问题,去网上找到了获取ip地址的内网和外网的方式。发现可以通过WebRTC的方式获取IP,但是感觉过于麻烦,因为我的目的不是获取ip,最终目的是获取城市编码,也就是通过ip去找城市编码,但是我发现搜狐的那个接口刚好是有返回城市编码的,所以还是用它那个比较简便

但是我发现好像不是这个问题,因为通过公网的那种script方法是可以获取到的,然后我就想用创建script标签的方式去获取
但是又遇到了问题,动态创建script的方式去获取,貌似会有异步的问题,那边数据还没返回回来,另一个script的代码就执行了。最终解决,在index.html里面加入script标签

数据库设计

文章和标签之间
一篇文章可以对应多个标签,一个标签也可以对应多个文章,所以需要根据标签分类
首先我想到的是数据库的那种联表查询,也就是join,然后我这个用sql语句查询的话,left join是可以搞定的,但是在sequelize中,因为涉及到表与表之间的关联操作。官网大概有一对一、一对多、多对多。我选择了多对多的方案,但是使用 belongsToMany 之后,首先使用传入字符串的那种方法,但是中间表是建立了,但是好像,没有联动起来,折腾了几番之后选择了第二种方法,自己创一个中间表,但是折腾之后也没实现。最后我想到就是直接查两个表,在标签表中每一项记录文章id和标签名,这样使它们对应起来,在每一次创建文章的时候都会根据传入的标签创建。在需要根据标签分类的时候,根据标签名从标签表里查出所有该标签名对应的文章id,然后从文章表中查出对应的一系列文章。