react如何实现双向绑定

React 本身没有内置双向绑定 ,它默认是单向数据流
state → 视图

视图要改回 state,必须手动写事件监听

所谓 React 的双向绑定,就是自己把"数据到视图"+"视图到数据"封装起来

一、最简实现(原生 React)

jsx 复制代码
function App() {
  const [value, setValue] = useState('')

  return (
    <input
      value={value}
      onChange={(e) => setValue(e.target.value)}
    />
  )
}

这就是 React 版双向绑定

  • 数据 → 视图:value={value}
  • 视图 → 数据:onChangesetValue

二、封装成类似 v-model 的工具

你可以封装一个自定义 Hook,实现像 Vue 一样简洁:

jsx 复制代码
function useModel(initialState) {
  const [value, setValue] = useState(initialState)
  return {
    value,
    onChange: e => setValue(e.target.value)
  }
}

// 使用
function App() {
  const username = useModel('')

  return <input {...username} />
}

这样就和 v-model="username" 几乎一样用。

三、React 18 官方:useImperativeHandle 不算

真正 React 里:

  • 没有 v-model 指令
  • 没有自动双向绑定
  • 一切都是**受控组件(Controlled Component)**手动实现

四、和 Vue 对比

Vue React
双向绑定 v-model 内置指令 无内置,手动 value + onChange
数据流 天然双向 单向数据流,手动实现双向
简洁度 极简洁 稍繁琐,但更可控

五、面试标准答案

  1. React 没有内置双向绑定 ,遵循单向数据流
  2. 通过受控组件 实现双向绑定:
    • value 绑定 state
    • onChange 事件更新 state
  3. 可以封装自定义 Hook 简化写法,达到类似 v-model 的效果。
相关推荐
ZC跨境爬虫10 分钟前
跟着 MDN 学 HTML day_38:(DocumentFragment 文档片段接口详解)
前端·javascript·ui·html·音视频
@大迁世界1 小时前
41.ShadCN 是什么?它如何和 Tailwind CSS 集成,从而更容易构建可访问且可自定义的 React 组件?
前端·javascript·css·react.js·前端框架
xiangxiongfly9153 小时前
Vue3 根据角色权限动态加载路由
前端·javascript·vue.js·动态加载路由
费曼学习法4 小时前
React 18 并发模式(Concurrent Mode):Fiber 架构的终极进化
javascript·react.js
_风满楼4 小时前
TDD 进阶:换个角度看会议室预约
前端·javascript·github
子兮曰4 小时前
SuperSplat 深度解析:7.6K Stars 的浏览器端 3D 高斯泼溅编辑器 — 在 Web 上编辑现实
前端·javascript·webgl
xiangxiongfly9155 小时前
Vue3 动态加载静态资源
前端·javascript·vue.js
克里斯蒂亚诺更新5 小时前
ruoyi切换新版本初始化需要修改的地方
前端·javascript·vue.js
zithern_juejin5 小时前
JS的防抖与节流
javascript
candyTong6 小时前
如何写一个可以进化的前端系统验收 SKILL
javascript