整洁的代码不仅仅是正常运行的代码,更是要求易于阅读、简单易懂、组织整齐。
在本文中,我会们将示例几种代码整洁案例。
在阅读这些建议时,要记住这些只是建议! 如果你不同意它们中的任何一个,那也完全没关系。
以下这些实践,个人觉得对我自己编写 React 代码很有帮助。
1. 仅对一个条件进行渲染
如果需要在条件为true
时渲染某些内容,而在条件为false
时不渲染任何内容,不推荐使用三元表达式,改用与运算符&&
,它可以方便地条件渲染一个元素。
优化前:
1 2 3 4 5 6 7 8 9 10 11
| import React from "react";
export const TopNav = (props: { showSearch?: boolean }) => { const { showSearch = false } = props; return ( <div className="doc-head"> {} {showSearch ? <SearchBox placeholder="输入关键词搜索" onSearch={(keyword) => window.location.assign(`/privatecloud/search?q=${keyword}`)} style={{ marginRight: 100 }} /> : null} </div> ); };
|
优化后:
1 2 3 4 5 6 7 8 9 10 11
| import React from "react";
export const TopNav = (props: { showSearch?: boolean }) => { const { showSearch = false } = props; return ( <div className="doc-head"> {} {showSearch && <SearchBox placeholder="输入关键词搜索" onSearch={(keyword) => window.location.assign(`/privatecloud/search?q=${keyword}`)} style={{ marginRight: 100 }} />} </div> ); };
|
2. 每一个条件都可能进行渲染
如果需要在条件为 true 时渲染某些内容,而在条件为 false 时渲染其他内容。推荐使用三元表达式
!
优化前:
1 2 3
| {} { good && <p>Good!</p> } { !good && <p><b>Not Good!<b></p> }
|
优化后:
1 2 3 4 5 6 7 8 9 10 11 12
| { } { good ? ( <p>Good!</p> ) : ( <p> <b>Not Good!</b> </p> ); }
|
3. 组件 Boolean props 传参
组件接收参数的属性值为布尔类型, 并且传入 true 值时,可以省略填写值,并不会影响组件内取到 true 值
优化前:
1 2
| <Hello disabled={true} /> <Hello disabled={false} />
|
优化后:
1 2
| <Hello disabled /> <Hello disabled={false} />
|
4. 组件 String props 传参
组件 Props 值为 String, 推荐使用双引号包裹,不使用花括号或反引号。
优化前:
1 2 3
| <Hello personName={"Jim"} /> <Hello personName={'Tom'} /> <Hello personName={`Ken`} />
|
优化后:
1 2 3
| <Hello personName="Jim" /> <Hello personName="Tom" /> <Hello personName="Ken" />
|
5. Event handler functions
如果一个事件函数只接受一个参数,不需要传入匿名函数:onChange={ e => handleChange(e) },推荐这种写法(直接等于函数): onChange={ handleChange } 。
优化前:
1 2 3 4
| const handleChange = (e) => { console.info(e.target.value); }; <input id="name" value={inputValue} onChange={(e) => handleChange(e)} />;
|
优化后:
1 2 3 4 5 6 7
| const handleChange = (e) => { console.info(e.target.value); }; { } <input id="name" value={inputValue} onChange={handleChange} />;
|
6. components as props
将组件作为参数传递给另一个组件时,如果该组件不接受任何参数,则无需将该传递的组件包装在函数中。
优化前:
1 2
| <Hello ClockComponent={() => <Clock timestamp={new Date().getTime()} />} /> <Hello ClockComponent={() => <Clock />} />
|
优化后:
1 2
| <Hello ClockComponent={() => <Clock timestamp={new Date().getTime()} />} /> <Hello ClockComponent={Clock} />
|
7. 设置 state 依赖先前的 state
如果新 state 依赖于先前 state,则始终将 state 设置为先前 state 的函数。可以批处理 React 状态更新。
优化前:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import React, { useState } from "react";
export const Hello = () => { const [cout, setCount] = useState < number > 0;
const handleClick = (e) => setCount(cout + 1);
const handleClickRunDouble = (e) => { handleClick(e); handleClick(e); };
return ( <div> <button onclick={handleClick}>click here</button> <span>{count}</span> <button onclick={handleClickRunDouble}>click here & lunch 2 times</button> </div> ); };
|
优化后:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import React, { useState } from "react";
export const Hello = () => { const [cout, setCount] = useState < number > 0;
{ } const handleClick = (e) => setCount((c) => c + 1);
const handleClickRunDouble = (e) => { handleClick(e); handleClick(e); };
return ( <div> <button onclick={handleClick}>click here</button> <span>{count}</span> <button onclick={handleClickRunDouble}>click here & lunch 2 times</button> </div> ); };
|
以上 7 个就是我推荐和总结的几个React
代码整洁优化实践 。
最后,祝大家开发愉快!