数据表的设计

比如我们有个表(UserLiked)记录用户喜欢的 workspace 内容,且一个用户可以喜欢多个 workspace

前端的 UI 展现是用户点击 like 界面显示出用户全部喜欢的 workspace

现在有下面两种表结构,你觉着哪种不错?

注意,MYSQL并不支持Array类型,这里只是比较表设计。

阅读全文

Typescript动态类型推断

实现一个功能,根据第一个字段输入的值来动态更改其余字段的类型

比如如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
interface InputProps {
label: string;
}
interface SelectProps {
name: string;
}
export interface InputType {
input: InputProps;
select: SelectProps;
}
export type FormItemDefinition = {
type: 'input' | 'select';
componentProps?: any
}

阅读全文

Redux为什么需要中间件来处理异步数据流?

我们明明可以在async之后直接调用dispatch,为什么又要多此一举引入中间件呢?

为什么需要中间件来处理Redux异步数据流?

阅读全文

React Hook使用小记录

UseMemo 的使用

FP 组件每次更新渲染都会被调用,我们希望更新时保存上次渲染的状态
比如如下组件 onChange触发之后组件更新,结果输入的值又没了

阅读全文

Actor Model 编程模型浅谈

本文转载自 http://jiangew.me/actor-model/

    阅读全文

    Redux-thunk代码分析

    下面是redux的applyMiddleware代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    export default function applyMiddleware(
    ...middlewares: Middleware[]
    ): StoreEnhancer<any> {
    return (createStore: StoreEnhancerStoreCreator) => <S, A extends AnyAction>(
    reducer: Reducer<S, A>,
    preloadedState?: PreloadedState<S>
    ) => {
    const store = createStore(reducer, preloadedState)
    let dispatch: Dispatch = () => {
    throw new Error(
    'Dispatching while constructing your middleware is not allowed. ' +
    'Other middleware would not be applied to this dispatch.'
    )
    }

    const middlewareAPI: MiddlewareAPI = {
    getState: store.getState,
    dispatch: (action, ...args) => dispatch(action, ...args)
    }
    const chain = middlewares.map(middleware => middleware(middlewareAPI))
    dispatch = compose<typeof dispatch>(...chain)(store.dispatch)

    return {
    ...store,
    dispatch
    }
    }
    }

    阅读全文

    我眼中的Redux

    现代大型React应用必须要用一个中央数据存储便于不同组件之间共享数据

    奈何本人水平太菜,接触Redux时扑面而来一堆概念,明白特地花了一张图搞明白它~~ 今后有机会一定持续更新🤣

    图中部分代码来自Redux官网 https://redux.js.org/basics/actions

    阅读全文

    读Go泛型提案有感

    原本我以为Go添加泛型就加个type注释就可以,刚读了一遍Go generic proposal,发现要考虑的很多

    提案里用C++类比,很久没写,不怎么熟悉,我用Java举例子

    如下Go代码

    1
    2
    3
    4
    5
    6
    7
    // This function is INVALID.
    func Stringify(type T)(s []T) (ret []string) {
    for _, v := range s {
    ret = append(ret, v.String()) // INVALID
    }
    return ret
    }

    这份代码问题在于,v只是T类型,编译系统无法确定T类型含有String()方法,在Go中,全部的字段都会在编译时进行解析绑定,所以Go不允许上面的写法

    阅读全文

    复习大学算法课

    挺多东西时间长了不接触都忘记了

    10÷6=1...4
    10是被除数,6是除数,1是商,4是余数

    4 == 10 % 6

    两数相除,除数变被除数,余数变除数

    设余数为x

    阅读全文

    一个简单的React模板以及一些React运作流程的简短分析

    我知道你看不懂的 😂

    阅读全文