先说最要命的JSX。刚开始我心想这不就是HTML套个马甲嘛,结果第一天就栽了大跟头------给div加个class属性,浏览器直接报错!原来得写成className,还有onClick必须驼峰命名。最坑的是每个组件只能返回一个根元素,想并列写两个div?门儿都没有!后来发现可以用空标签<></>包裹,或者直接用React.Fragment。这些细节看似鸡毛蒜皮,实际开发中能省下好多调试时间。
组件的拆分才是重头戏。我刚开始把整个页面都写在一个文件里,后来改需求差点没哭出来。现在学乖了,见到重复出现的UI块就抽成组件,比如按钮、卡片、导航栏这些。记住啊,组件名一定要大写字母开头!有次我手滑写成小写,React直接当普通HTML标签解析了,查bug查到凌晨三点。状态管理这块,函数组件用useState真心香,比类组件那套this.setState清爽多了。不过注意state更新是异步的,连续set同一个值会被合并,这个坑我踩过两次。
说到Hooks真是让人又爱又恨。useEffect这个磨人的小妖精,依赖数组没写对就能让你代码崩得亲妈都不认识。我有次在useEffect里调接口忘记加空依赖数组,结果组件每秒重新渲染几十次,直接把后端服务器打挂了。还有useCallback和useMemo这两个性能优化钩子,刚开始我觉得多余,直到在项目里遇到子组件疯狂重渲染才明白它们的妙用。不过也别滥用,毕竟它们本身也有开销。
最近在折腾React Router做路由管理,发现导航守卫这玩意儿挺有意思。用useEffect监听路由变化,配合useNavigate实现权限拦截,比直接在按钮上写跳转优雅多了。状态提升也是个必备技能,子组件想改父组件状态?传回调函数下去就完事了。要是组件层级太深,Context API或者状态管理库就该出场了,不过简单项目真没必要上Redux,useContext加useReducer完全够用。
实战中最常遇到的还是列表渲染和条件渲染。map遍历数组时老忘记写key,React警告都能把控制台刷屏。条件渲染推荐用&&操作符或者三元表达式,比if-else灵活得多。表单处理建议直接上受控组件,虽然代码量多点,但是数据流清晰啊。别忘了用prevState来更新状态,特别是依赖前一个状态值时,直接更新可能会出幺蛾子。
最后给新人几个血泪建议:首先脚手架用Create React App就行,别一上来就搞自定义Webpack配置;其次开发工具一定要装React Developer Tools,调试起来简直开挂;还有记得开启严格模式,它能帮你提前发现不少问题。这框架生态太庞大了,别想着把所有库都学完,先把核心玩转再慢慢扩展。
反正React这东西就是越用越顺手,刚开始可能觉得约束多,等真正项目跑起来就会发现这些约束都是在帮你避坑。得,今天先唠到这儿,我要继续去啃自定义Hooks了,有啥问题评论区见哈!