项目技术总结
// old one
onChange={this.handleContentChange.bind(this)} />
// good one
onChange={e=>{this.handleContentChange(e)}} />
//合理的使用 _render(),把需要做数据处理和转换的 render 先分离出来再做 render 处理
//部分引用代码就不贴了
_render() {
const { user } = this.state;
return (
user && (
<div className="box">
<ul>
<li> 姓名: {user.name || '暂无'}li>
<li> 状态: {user.status || '暂无'}li>
<li> 手机: {user.tel || '暂无'}li>
ul>
div>
)
);
}
render() {
return (
<Page className="page">
<Title title="详细信息" />
{this._render()}
Page>
);
}
复制代码
//还是刚刚那个栗子
getUser = async () => {
this.setState({
loading: true,
error: null
});
try {
const { data } = await http.get(API.user());
this.setState({
user: data
});
} catch (error) {
this.setState({
error
});
}
this.setState({
loading: false
});
};
_render() {
// 当然我们首先要根据项目来自定义我们的 loading 框和 error 框,一些开源的 UI 框架也有这些设计,直接用也可以。
const { loading, error, user } = this.state;
if (loading) {
return <Loading className="loading" />;
}
if (error) {
return <ErrorBox error={error} onClick={this.getUser} />;
}
return (
user && (
<div className="box">
<ul>
<li> 姓名: {user.name || '暂无'}li>
<li> 状态: {user.status || '暂无'}li>
<li> 手机: {user.tel || '暂无'}li>
ul>
div>
)
);
}
render() {
return (
<Page className="page">
<Title title="详细信息" />
{this._render()}
Page>
);
}
复制代码
// old one
class CommentInput extends Component {
constructor () {
super()
this.state = {
username: '',
content: ''
}
}
...
}
//good one
/*
** 我们可以不用 super 来继承了,现在可以简写
*/
class CommentInput extends Component {
state = {
username: '',
content: ''
}
...
}
复制代码
this.props.$formutil = {
$params: { amount: 100 },
a: 'test',
b:[{ c:'hello' },2,3]
}
//可以使用同数据结构相同的方法直接拿到内部的 amount
const { $params: { amount }, a , b:[{ c }] } = this.props.$formutil;