输出完全取决于参数
无副作用 (Immutable)
关注想得到的结果,而不是过程(声明式)
}
纯函数
✅
❌
(showButton, buttonText) =>
<div>
{showButton &&
<button>
{buttonText}
</button>}
</div>
(showButton) =>
<div>
{showButton &&
<button>
{localStorage
.getItem(‘buttonText’)}
</button>}
</div>
✅
❌
const addItem = (itemList, item) => {
return [...itemList, item]
}
const addItem = (itemList, item) => {
itemList.push(item);
return itemList;
}
const getMessage = async () => {
const message =
await get('/api/message');
return message;
}
描述我想要的结果是什么
描述具体怎么做
(showButton) =>
<div>
{showButton && <button>click</button>}
</div>
(showButton, $container) => {
if (showButton) {
$container
.append($('<button>click<button>'));
} else {
$container
.remove('button');
}
}
const getFields = (items, fieldName) => items
.filter(item => item[fieldName])
.sort((a, b) => a[fieldName] - b[fieldName])
.map(item => item[fieldName])
const getFields = (items, fieldName) => {
const ret = [];
for (let i = 0; i < item.length; i++) {
if (items[i][fieldName]) {
ret.push(items[i][fieldName])
}
}
return ret;
}
// https://reactjs.org/docs/components-and-props.html
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
Redux State
UI
Reducer
Actions
pure
pure
pure
impure
UI 数据来源与生命周期:
Redux state (每次页面刷新)
Component state (每次组件加载)
localStorage / sessionStorage (永久 / 浏览器打开)
cookie (取决于后端设置)
URL (每次 URL 改变)
History state (每次 URL 改变)