大型前端项目降低复杂度新思路(1)

本文探讨了在大型前端项目中降低复杂度的新思路,特别是通过使用状态机来管理搜索请求的复杂逻辑。随着需求的增加,代码的复杂度也随之上升,包括错误处理、请求中断和边界情况的判断。引入状态机,如XState,可以清晰地描述状态转换,简化代码,并提高可维护性。此外,状态图有助于协作、文档化和提升用户体验,例如通过状态机进行用户操作链路的追踪和分析。状态机方法提供了比传统编码方式更易理解和解耦视图的优势。
摘要由CSDN通过智能技术生成

});

}

还会发生出请求出错的情况:

function onSearch(keyword) {

this.setState({

isLoading: true,

});

fetch(SEARCH_URL + “?keyword=” + keyword)

.then((data) => {

this.setState({ data, isLoading: false });

})

.catch((e) => {

this.setState({

isError: true,

});

});

}

当然,不能忘记把 Loading 关掉:

function onSearch(keyword) {

this.setState({

isLoading: true,

});

fetch(SEARCH_URL + “?keyword=” + keyword)

.then((data) => {

this.setState({ data, isLoading: false });

})

.catch((e) => {

this.setState({

isError: true,

isLoading: false,

});

});

}

我们每次搜索时,还需要把错误清除:

function onSearch(keyword) {

this.setState({

isLoading: true,

isError: false,

});

fetch(SEARCH_URL + “?keyword=” + keyword)

.then((data) => {

this.setState({ data, isLoading: false });

})

.catch((e) => {

this.setState({

isError: true,

isLoading: false,

});

});

}

这就结束了么,是不是我们把所有的 Bug 都考虑进去了?并没有。当用户在等待搜素请求的时候,不应该再去搜索,所以搜索结果返回前,禁止再次发送请求:

function onSearch(keyword) {

if (this.state.isLoading) {

return;

}

this.setState({

isLoading: true,

isError: false,

});

fetch(SEARCH_URL + “?keyword=” + keyword)

.then((data) => {

this.setState({ data, isLoading: false });

})

.catch((e) => {

this.setState({

isError: true,

isLoading: false,

});

});

}

可以看到,应用的复杂度在不断变大,可能你经历的场景比这个小示例还要复杂的多的多。如果因为搜索接口特别慢,用户希望有一个中断搜索的功能,那么新的需求又来了:

function onSearch(keyword) {

if (this.state.isLoading) {

return;

}

this.fetchAbort = new AbortController();

this.setState({

isLoading: true,

isError: false,

});

fetch(SEARCH_URL + “?keyword=” + keyword, {

signal: this.fetchAbort.signal,

})

.then((data) => {

this.setState({ data, isLoading: false });

})

.catch((e) => {

this.setState({

isError: true,

isLoading: false,

});

});

}

function onCancel() {

this.fetchAbort.abort();

}

不能落下对 catch 的特殊处理,因为中断请求会触发 catch:

function onSearch(keywo

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值