96SEO 2026-08-13 02:35 0
你写了一个使用者名编辑组件。说到功能很简单,页面显示当前使用者名。有个输入框可以编辑,点"Update"提交。

写完 V1,你看着 个 props 愣了一秒。按理说,接下来你重写了 V2,一样的功能。props 从 个变成 个,父组件从 行变成 行。
这篇文章就是讲清楚:为什么一样的功能。换个 state 归属,代码质量天差地别。
先看效果——两个版本跑起来一模一样:
页面显示:Hello 使用者名输入框:可以编辑按钮:点击提交 → 父组件收到新名字
区别全在代码架构上。
// App.tsx — 父组件包揽了所有 state
const App = => {
const = React.useState;const = React.useState;话说回来,const setUsernameState = => {
setName;// 🔑 父组件自己提交:从 editingName → name
};return (
<>
说到名字,{name}
<>
);},
对应的 NameEditingComponent 长这样:
// NameEditingComponent.tsx — 没有自己的 state,完全受控
interface Props {
editingName: string;其实,onNameUpdated: => void;onEditingNameUpdated: => void;disabled: boolean;}
const NameEditingComponent: React.FC = => {
const { onEditingNameUpdated。onNameUpdated,editingName,disabled } = props;const onChange = => {
onEditingNameUpdated;// 回调父组件,不存 state
};const onSubmit = => {
onNameUpdated;// 无参——值已在父组件里
};return (
<>
<>
);},不过,
个 props。个自有 state,子组件是个“传声筒”——所有逻辑都在父组件。
// App2.tsx — 父组件只管最终值
const App: React.FC = => {
const = React.useState;return (
);},
父组件只剩 个 props。编辑过程的中间状态去哪了?进子组件了的观点是,
// NameEditComponent.tsx — 拥有自己的编辑状态
interface Props{ initialUsername:string。 onNewUsername:=>void,} const NameEditComponent==>{ // 🔑关键:编辑状态归子自己管 const=React.useState;const handleChange==>setEiting const handleSubmit==>{onNewUser} return(
个 props、个自有 state。话说回来,子件不再是传声筒。而是能独立工作的单元。
// ⚠️ 父计算 disabled 与使用者输入无关
const disabled=editing===''||editing===name;`
disabled 的判断本质上属于 编辑器 的责任,而不是外部控制。
因为业务 :
ts
// 在 V1 中 `onSubmit` 没参数。只是通知“更新”
onSubmit
如果未来要实现 “自动保存” 或 “按下 Enter 就提交”,这套 API 就无法满足——它被 固定 在“按钮 + 无参”模式上。
ts
// V1 接口暴露两层细节:
interface Props{
editing:string。update:void,change:void,disable:boolean,}
// 不必要暴露内部实现细节,只让外部知道“初始值”和“结果”更好。老实说,
| 场景 | state 放哪 | 例子 | |
|---|---|---|---|
| state 被单独某组建使用 | 下沉 | ✅️ | |
| 跨兄弟共享 | 提高至最近公共祖先 | ✅️ | |
| 跨路由/全局持久化 | Context/Store | ✅️ |
至于回到这个例子,
username – 被 Hello 和 NameEdit 同时需要 → 放 App ✅
editing – Only used by NameEdit → 放 NameEdit ✅
...
🛑
`useState` 初始值只会在第一次渲染时生效。如果父端异步更新 `initialUsername`,V2 中 `editing` 不会自动同步:
ts
const = useState;useEffect=>{ setEdit;},),
这不是设计缺陷,而是提醒你 下沉后仍需显式同步。
回到开头那个问题:“为什么一样功能,却代码差那么多?” 因为 V1 把不应当托管于自己的 `` 状态和逻辑都交给了外层;而 V2 则把责任拆分到最合适的位置,让每块工作更集中、更易维护。
React 开发第一原则: 让 state 总是住在离使用者最近的地方。如果它只服务于某个组建,它就应该属于那个组建。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback