我对这些概念有点模糊,如果我完全用AngularJS和ReactJS构建相同的ToDo应用程序——是什么让React ToDo使用单向数据绑定而不是AngularJS的双向数据绑定?

我知道React有点像

Render(data) ---> UI.

这和Angular 有什么不同?

推荐答案

有棱角的

当angular设置数据绑定时,存在两个"观察者"(这是一种简化)

//js
$scope.name = 'test';
$timeout(function()  { $scope.name = 'another' }, 1000);
$timeout(function()  { console.log($scope.name); }, 5000);

<!-- html --->
<input ng-model="name" />

输入将从test开始,然后在this fiddle0毫秒内更新到another.对$scope.name的任何更改,无论是来自控制器代码还是通过更改输入,都将在4000毫秒后反映在控制台日志(log)中.对<input />的更改会自动反映在$scope.name属性中,因为ng-model设置监视输入,并将更改通知$scope.代码的更改和HTML的更改是two-way binding.(查看this fiddle)

React

React没有允许HTML更改组件的机制.HTML只能引发组件响应的事件.典型的例子是使用onChange.

//js
render() { 
    return <input value={this.state.value} onChange={this.handleChange} />
}
handleChange(e) {
    this.setState({value: e.target.value});
}

<input />的值由render功能控制entirely.更新该值的唯一方法是从组件本身,这是通过将onChange事件附加到<input />来完成的,<input />通过react 组件方法setStatethis.state.value设置为.<input />无法直接访问组件状态,因此无法进行更改.这是one-way binding.(看看这个codepen)

Reactjs相关问答推荐

有关列表元素上缺少唯一键的react 错误:如何获取有关问题所在位置的更多信息?

从app.js导航,这是在BrowserRouter包装之外

如何使用Reducer更新全局变量

useTranslation不会在languageChanged上重新呈现组件

两条react 路由的行为不同.有没有人能解释一下,我已经找了好几天了

UseEffect和useSelector的奇怪问题导致无限循环

Antd V5组件自定义主题

找不到名称setCometChat

React对象值下降2次而不是1次

如何在 React 过滤器中包含价格过滤器逻辑?

cypress `cy.now()` Type 'Promise' 没有调用签名

使用 nextjs App Router 在动态客户端进行服务器端渲染

将 clerk 与 supabase 集成的最佳实践

使用状态与复选框不同步

动态添加或删除文本输入字段并将值设置为 React JS 中主要状态的数组

从一个获取 axios 请求(ReactJS)中删除默认参数

如何使用 UseState 正确测试组件

如何在 React 中的 Material Ui 多选中设置默认值?

单击当前子div时如何更改p标签的图像和样式?react

RTK 查询 POST 方法不会改变数据