4个React技巧,瞬间改善你的代码

扎实的React知识是前端开发者最宝贵的技能之一。许多公司都在不断寻找React开发人员,我想分享四个对我编写更好的React代码有帮助的提示。我希望你会发现一些新的和有用的东西

场景一

先上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

export default function App() {
const [user, setUser] = useState({
name: "",
surname: "",
address: ""
});

// handler 1!!!
const handleNameChange = (e) => {
setUser((prev) => ({
...prev,
name: e.target.value
}));
};

// handler 2!!!
const handleSurnameChange = (e) => {
setUser((prev) => ({
...prev,
surname: e.target.value
}));
};

// handler 3!!!
const handleAddressChange = (e) => {
setUser((prev) => ({
...prev,
address: e.target.value
}));
};



return (
<>
<input value={user.surname} onChange={handleSurnameChange} />
<input value={user.address} onChange={handleAddressChange} />
</>
);
}

如果我们还需要一个输入怎么办?我们应该为它创建另一个处理程序吗?
如果你懂React中的函数式编程,我想你应该懂了。

解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
export default function App() {
const [user, setUser] = useState({
name: "",
surname: "",
address: ""
});

const handleInputChange = (field) => {
return (e) => {
setUser((prev) => ({
...prev,
[field]: e.target.value
}));
};
};

(
<>
<input value={user.name} onChange={handleInputChange("name")} />
<input value={user.surname} onChange={handleInputChange("surname")} />
<input value={user.address} onChange={handleInputChange("address")} />
</>
);
}

场景2

阅读下面代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function Account({type}) {
let Component = UsualAccount

if (type === 'vip') {
Component = VipAccount
}

if (type === 'moderator') {
Component = ModeratorAccount
}

if (type === 'admin') {
Component = AdminAccount
}

return (
<div className='account'>
<Component />
<AccountStatistics />
</div>
)
}

解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const ACCOUNTS_MAP = {
'vip': VipAccount,
'usual': UsualAccount,
'admin': AdminAccount,
'moderator': ModeratorAccount,
}

function Account({type}) {
const Component = ACCOUNTS_MAP[type]

return (
<div className='account'>
<Component />
<AccountStatistics />
</div>
)
}

如果你需要根据变量来显示不同组件,你可以这样实现。
使用这种简单的策略使组件更具有声明性,简化了代码理解。此外,它使进一步扩展功能变得更加容易。

场景3

请阅读代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function useItemsList() {
const defaultItems = [1, 2, 3, 4, 5]
const [items, setItems] = useState(defaultItems)

const toggleArrayItem = (arr, val) => {
return arr.includes(val) ? arr.filter(el => el !== val) : [...arr, val];
}

const handleToggleItem = (num) => {
return () => {
setItems(toggleArrayItem(items, num))
}
}

return {
items,
handleToggleItem,
}
}

解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const DEFAULT_ITEMS = [
1, 2, 3, 4, 5
]

const toggleArrayItem = (arr, val) => {
return arr.includes(val) ? arr.filter(el => el !== val) : [...arr, val];
}

function useItemsList() {
const [items, setItems] = useState(DEFAULT_ITEMS)

const handleToggleItem = (num) => {
return () => {
setItems(toggleArrayItem(items, num))
}
}

return {
items,
handleToggleItem,
}
}

我们的想法是将不需要React组件生命周期方法的逻辑与组件本身分开。
这通过使依赖关系更加明确来提高代码的清晰度。因此,阅读和理解组件变得更加容易。

https://medium.com/javascript-in-plain-english/4-react-tips-to-instantly-improve-your-code-7456e028cfa3#fd60

8 个 GitHub Repos 让你成为更好的开发者 14个基本的开发者工具,让你的生产力提高10倍

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×