在 React 中使用 mobx 进行状态管理
observable
inject
computed
action
autorun
RunInAction
Reaction
尽量使用箭头函数
调试
toJS 需要引入 => 不如直接 JSON.stringify()方便
不用使用数组索引或者任何将来可能会改变的值作为 key 。如果需要的话为你的对象生成 ids。
参考技巧
var array = [{name:'武汉'}, {name: '北京'}, {name:'上海'}, {name:'天津'}]; var resultArray = array.sort( function compareFunction(param1, param2) { return param1.name.localeCompare(param2.name,"zh"); } ); console.log(resultArray);
|
根据现有的状态或其它计算值衍生出的值,响应式的产生一个可以被其它 observer 使用的值
import {observable, computed} from "mobx";
class OrderLine { @observable price = 0; @observable amount = 1;
constructor(price) { this.price = price; } @computed get total() { return this.price * this.amount; } }
|
想不产生一个新值,而达到一个效果,请使用 autorun。 举例来说,效果是像打印日志、发起网络请求等这样命令式的副作用。
autorun 中的值必须要手动清理才行
@action fetchShopPlanList = (): ActionResponse => { const [begin, end] = this.dateRange; return http .post(ApiBaseinfo_Admin_Restaurant_restaurantID_menuCalendarByDateRange, { ':restaurantID': globalStore.currentShopID, begin, end, }) .then(({ error, data }) => { if (error) { return { error }; }
runInAction(() => { const { menuCalendarList } = data; this.boundObj = menuCalendarList.reduce((preObj, mealPlan) => { const { color, name, date } = mealPlan; if (color) { preObj[`${date}_${name}`] = color; }
return preObj; }, {}); this.shopCalendarList = data.menuCalendarList; });
return { data }; }); };
|
React-router V4
React 创建的单页应用中、通过路由来控制页面间的跳转,常用的就是 react-router、react-router-dom
React Router中有三类组件
- 路由组件 BrowserRouter, HashRouter
- 路由匹配组件 Route, Switch
- 导航、链接组件 Link
基于 React Router 的 web 应用,根组件应该是一个 router 组件(BrowserRouter,HashRouter )。 项目中,react-router-dom 提供了和两种路由。两种路由都会创建一个 history 对象。如果我们的应用有服务器响应 web 的请求,我们通常使用组件; 如果使用静态文件服务器,则我们应该使用组件 通常都是使用
Demo
Link 组件最终会渲染为 HTML 标签 ,它的 to、query、hash 属性会被组合在一起并渲染为 href 属性。虽然 Link 被渲染为超链接,但在内部实现上使用脚本拦截了浏览器的默认行为,然后调用了history.pushState 方法