- 01. ます形 + たい
- 02. ます形 + ながい
- 03. ます形 + やすい・にくい
- 04. ます形 + かた
- 05. ます形 + 始めます
- 06. ます形 + 終わります
- 07. ます形 + 続けます
- 08. ます形 + 出します
- 09. ます形 + に行きます
- 10. ます形 + ませんか?
- 11. ます形 + ましょう
- 12. ます形 + ましょうか?
按照不同的教学方法,动词分三类或者五类。但其实都是一样的,只是叫法不同。
以辞书形/基本型记:
一类动词(五段动词) | 二类动词(一段动词) | 三类动词(サ変动词、カ変动词) |
---|---|---|
①不以 る 为结尾的动词;词尾在 う段。 ②词尾为 る ,倒数第二个假名不在 い段 或 え段。 | 词尾为 る ,倒数第二个假名为 い段 或 え段。 | サ変:する / 词干+する (例:洗濯する、掃除する、勉強する) カ変:来る |
①買う、喜ぶ、行く、飲む、勝つ、倒す ②知る、切る、作る、分かる | 見る、食べる、考える、助ける、別れる | サ変:する,勉強する カ変:来る (只有一个) |
*注:有些词虽然符合“二类动词”这个规律但仍然为一类动词。比如:見(み)る、起き(おき)る、帰(かえ)る、焦(あせ)る、嘲る(あざける)、 限(かぎ)る、茂(しげ)る、滑(すべ)る、喋(しゃべ)る、入(はい)る等。需要单独记忆。大部分情况:い 或 え的音都发在汉字里了 |
以ます形/连用形/敬体记
一类动词(五段动词) | 二类动词(一段动词) | 三类动词(サ変动词、カ変动词) |
---|---|---|
ます前面的母音是 い 的音 | ます前面的母音是 え 的音 | します・来ます |
書きます、のみます、遊びます、撮ります、待ちます、買います、話します | 教えます、開けます、食べます、寝ます *置きます、おります、見ます(特殊,需要特别记忆) | サ変:します カ変:来ます |
分类:
い形容词 | な形容词 | ||
おいしい | 美味しい | にぎやか | 賑やか |
やすい | 安い | げんき | 元気 |
さむい | 寒い | きれい | 綺麗 |
いい | いい | ゆうめい | 有名 |
い形容词+名词 おいしい+パン | な形容词+な+名词 にぎやかな街 |
时态:
い形容词 | な形容词 | い形容词 的 いい | |
现在 | おいしい | にぎやかです | いい |
现在否定 | おいしくない | にぎやかじゃない | よくない |
过去 | おいしかった | にぎやかでした | よかった |
过去否定 | おいしくなかった | にぎやかじゃなかった | よくなかった |
いい 比较特殊,要单独记忆。 |
提供了操纵多个状态的能力,如果状态是单个的,可以是 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 包。