0%

下面是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
}
}
}

下面就是Thunk这个中间件的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function createThunkMiddleware(extraArgument) {
return ({ dispatch, getState }) => (next) => (action) => {
if (typeof action === 'function') {
return action(dispatch, getState, extraArgument);
}

return next(action);
};
}

const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;

export default thunk;

这个中间件返回了嵌套的函数闭包,其中下面的函数就是applyMiddlewares的 store.dispatch

阅读全文 »

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

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

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

原本我以为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

阅读全文 »

如果你使用Windows 2004H版本的pinyin 输入法,那么有一定概率 horizontal/vertical 失效

如果下图 vertical 模式,你不管点击多少次,永远不能切换成 horizontal 模式

在网上英文中文,windows feedback都查了个遍,反馈Bug也没人搭理,无果,只能靠自己的知识来解决了

首先按照常理,windows下系统自带软件的配置往往存放在注册表,而非本地配置文件,我们借助 procmon这个软件来监控 SystemSettings.exe进程对于注册表的操作,打开 Settings 然后点到输入法界面随便进行几点操作,发现对 InputMethod进行的操作

阅读全文 »

转载自

https://www.4k123.com/thread-8194-1-1.html

1、封装格式(MP4/MKV…) vs 媒体格式(H.264/FLAC/AAC…)

MP4+MKV是你下载的视频文件最常见的种类。这些文件其实类似一个包裹,它的后缀则是包裹的包装方式。这些包裹里面,包含了视频(只有图像),音频(只有声音),字幕等。当播放器在播放的时候,首先对这个包裹进行拆包(专业术语叫做分离/splitting),把其中的视频、音频等拿出来,再进行播放。

阅读全文 »

关于英语思维

我理解英文句子的时候总是有点不对劲,但不知道具体是哪里

翻译英文句子的时候总是对照着中文翻译,但这样的英文读起来就是中国式英语。

英语中介词短语和从句应用非常广泛,往往一个句子首先出现的是主谓宾,然后通过whoi,where等从句进一步解释

我需要熟练上述英语的表达方式才行

举个例子

阅读全文 »

每一个 server 都是一个虚拟主机,通过 httphost 字段区分不同的目录

这个 host 字段对应着nginxserver_name

oneindex需要 php-fpm 来处理请求,php-fpm 默认使用unix socket,需要在 /etc/php/7.0/fpm/pool.d/下的配置文件中添加

1
2
listen = 127.0.0.1:9000
listen = /run/php/php7.0-fpm.sock

使得 php-fpm 监听 9000 端口

阅读全文 »