一类 | 二类 | 三类 | |||
---|---|---|---|---|---|
iます形 | aない形 | ます形 | ない形 | ます形 | ない形 |
書(か)きます | 書かない | 食(た)べます | 食べない | します | しない |
飲(の)みます | 飲まない | 寝(ね)ます | 寝ない | 着(き)ます | 来(こ)ない |
作(つく)ります | 作らない | 教(おし)えます | 教えない | ||
待(ま)ちます | 待たない | 忘(わす)れます | 忘れない | ||
呼(よ)びます | 呼ばない | *見(み)ます | 見ない | ||
出(だ)します | 出さない | *起(お)きます | 起きない | ||
買(か)います | 買わない | *借(か)ります | 借りない | ||
*浴(あ)びます | 浴びない | ||||
一类:去掉 ます,依据 ます 前最后一个母音发音不同进行不同的变化。い的母音改成あ的母音 + ない 即可。 二类:去掉 ます 加 ない。ます变为 ない。*为特殊单词,虽然看起来是一类但是是二类,需要记忆。 三类:需要特殊记忆,简单来说就是ます -> ない,します 会通过 **します 来出现,也是按照 します 的变化来的,例如:勉強します -> 勉強しない |
提供了操纵多个状态的能力,如果状态是单个的,可以是 useState 的替代。
语法:
const [state, dispatch] = useReducer(reducer, initialState)
const [state, dispatch] = useReducer(reducer, initialState, initFunction)
// 惰性地创建初始 state, 需要将 init 函数作为 useReducer 的第三个参数传入,这样初始 state 将被设置为 init(initialState)
// 或者
const [state, dispatch] = useReducer(reducer, undefined, initFunction)
示例:
import React, {useReducer, useEffect} from "react";
import ReactDOM from "react-dom";
interface State {
count: number;
step: number
}
interface Action {
type: string;
payload?: any;
}
const initialState: State = {
count: 0,
step: 1,
};
const reducer = (state: State, action: Action) => {
const {count, step} = state;
if (action.type === 'tick') {
return {count: count + step, step};
} else if (action.type === 'step') {
return {count, step: action.payload};
} else {
throw new Error();
}
}
const Counter = () => {
const [state, dispatch] = useReducer(reducer, initialState);
const {count, step} = state;
useEffect(() => {
const id = setInterval(() => {
dispatch({type: 'tick'});
}, 1000);
return () => clearInterval(id);
}, [dispatch]);
return (
<div style={{
width: '200px',
margin: '100px auto 0 auto',
textAlign: 'center',
border: '1px solid #DDD',
borderRadius: '4px',
}}>
<h1 style={{margin: '10px 0'}}>
{count}
</h1>
<input
style={{
marginBottom: '10px',
border: '1px solid #DDD',
height: '32px',
lineHeight: '32px',
borderRadius: '4px',
}}
value={step}
onChange={e => {
dispatch({
type: 'step',
payload: Number(e.target.value)
});
}}
/>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<Counter/>, rootElement);
dependencies
顾名思义,就是依赖,但是这个依赖只在产品环境(–production)使用安装。
npm install 的时候会默认安装。
devDependencies
开发依赖, npm install 也会安装,但是 npm install –production 时 不会安装这个依赖。
例如:
project dependency 依赖如下:
dependencies: {
”a”: ‘0.0.1’,
”b”: ”0.0.2
},
devDependencies: {
”c”: “0.0.3”
},
npm install 会将 a b c 三个包都安装。而
npm install –production 只会安装 a b 两个包。
假如:
包 a 依赖两个包 x y;
dependencies: {
”x”: ‘0.0.1’
},
devDependencies: {
”y”: “0.0.2”
},
那么在项目 project dependency 中 npm install 会将 x 这个包安装,而 y 这个包不会安装。因为 依赖 a,但是不没有要开发 a,依赖的应该是 a 的产物才对。
peerDependencies
假设:
project dependency 依赖 的 b 包,但是 b 包并没有 dependencies 而有一个 peerDependencies。
peerDependencies: {
”a”: “0.0.1”
},
对于 b 包来说,host(宿主) 是 project dependency,那么一般使用 b 包的时候,几乎可以肯定的是会使用 a 包,所以 a 此时就可以是 b 的一个 peerDependencies。
即:在使用 b 包的时候,几乎可以肯定的是要使用 a 包。所以 b 包没有 dependencies 而有 peerDependencies。
此时 npm install project dependency 的依赖时,就将 b 包 的依赖也装上了,所以不需要显式的声明 b 包 的 dependencies 了。
不过如果 b 包 的 peerDependencies 和 宿主的依赖版本不同的时候,可能会出问题,所以此时最好将两个版本统一。例如 project dependency 依赖的 a 包,和 b 包 peerDependencies 依赖的 a 包。
一个用户可以属于多个组,而一个文件/文件夹可以属于一个组。组的权限就可以应用于文件/文件夹
添加组:sudo groupadd aNewGroup
sudo usermod -a -G aNewGroup user1
sudo usermod -a -G aNewGroup user2
sudo chgrp -R aNewGroup /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory
即可。
Unicode: ‘\u3000’,
字符:(“ ”)
1. 修改postgresql.conf
postgresql.conf存放位置在
/etc/postgresql/x.x/main
x
取决于你安装PostgreSQL的版本号,编辑或添加下面一行,使PostgreSQL可以接受来自任意IP的连接请求。
listen_addresses = '*'
2. 修改pg_hba.conf
增加这一行
#TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5
3. 重启服务
sudo service postgresql restart
第二步,修改密码
此时,远程登录时,可能提示密码不正确,修改默认用户的密码。
切换账号:sudo -u postgres psql
修改密码:ALTER USER postgres WITH PASSWORD 'postgres';
(注意后面有分号)
或者直接修改 Linux 账户的密码(未尝试)
步骤一:删除用户postgres的密码
sudo passwd -d postgres
步骤二:设置用户postgres的密码
sudo -u postgres passwd
系统提示输入新的密码
Enter new UNIX password:
Retype new UNIX password:
如果想新建不同的账户,则按照 Linux 创建账号的步骤来就可以了,因为 PostgreSQL 默认使用的是基于 Linux 的账户认证系统。