扎实的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: "" });
const handleNameChange = (e) => { setUser((prev) => ({ ...prev, name: e.target.value })); };
const handleSurnameChange = (e) => { setUser((prev) => ({ ...prev, surname: e.target.value })); };
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