- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自 React 文档。
Conceptually, components are like JavaScript functions. They accept arbitrary inputs (called “props”) and return React elements describing what should appear on the screen.
考虑:
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
或
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
将使我们能够做到这一点:
<Welcome name="Luke" />;
<Welcome name="Leia" />;
在 DOM 中按照我们的意愿使用,
现在当人们规定不应更改 props 时,这是有道理的,原因是在我看来这与更改图像标签的属性值一样吗?
HTML:
<img id="Executor" alt="Picture of Executor" src="/somepath/vaders-star-destroyer-executor.jpg"/>
JS:
与此同时,很久以前在一个遥远的星系中的 Javascript 文件中......
var imageOfVadersStarDestroyer = document.getElementById('Executor');
imageOfVadersStarDestroyer.src = "/somepath/vaders-star-destroyer-avenger.jpg"
因为如果我们不断更改元素属性值,这会导致困惑和渲染速度变慢?
那么 React 中规定永远不要更改 props 的原因是因为库正在尝试使元素尽可能可预测吗?
最佳答案
在 React 之外设置 props 是危险的,应该避免。为什么?主要原因是它不会触发重新渲染。因此会出现错误和意外行为。
大多数时候,props 是在父组件中作为状态存储的数据,通过调用 setState()
(或 React.useState( )
)。一旦 setState()
被调用,React 就会重新渲染并计算引擎盖下发生的变化,以及最新的 props 和状态。手动为 props 赋值,因此不会通知 React 数据已更改并且必须重新渲染某些内容。
将 props 设置为只读允许 React 组件尽可能纯净,这显然是一个很好的做法,即使在编写纯 JS 时也是如此。数据不会意外更改,只能通过调用 setState()
来完成(您可能听说过 single source of truth,这正是 React 正在尝试的杠杆)。
想象一下,您注意到应用程序出现问题并且显示给最终用户的数据与源数据完全不同,试图找出数据在哪里被操纵会很痛苦,不是吗? :)
关于javascript - React 中的 props 不应该被更改/突变的原因是因为 React 希望元素尽可能可预测吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57660115/
我想用 Graphite 烯一口气创造很多人。 文档只提到了这样创建一个人的方法: class CreatePerson(graphene.Mutation): class Input: na
我想发送没有子部分的 graphql 突变请求 mutation _ { updateCurrentUser(fullName: "Syava", email: "fake@gmail.com
通常查询是在您获取数据时,而变异是在您操作数据时。但是我将如何在没有任何参数的情况下实现突变? 在我的特殊情况下,我删除并创建了 2fa token 端点。 delete 和 create token
我正在使用 REDUX-TOOLKIT-QUERY,现在我有一种情况,我必须调用一个突变。一旦该突变返回响应,我必须在其他三个突变中使用该响应作为请求参数。我们如何才能以正确的方式实现它? const
突变是用于操作数据的查询。如果是这样,那么我的 root query和 root mutation树应该看起来相似吧?他们都应该允许嵌套字段(嵌套突变)。我正在玩这个(使用 express-graph
使用 R 3.6.1 (64) 位。使用 readxl 将数据框导入 R(命名为“RawShift”。我创建了 6 个变量(类:“字符”),它们是用户名列表。每个列表都以用户所在的团队命名。 我想使用
我正在尝试将 dplyr 中的 mutate 与动态变量名称一起使用。我发现了一些关于 SO(here、here 和 here)的帖子,它们让我更接近但不是可行的解决方案。我不认为缺少什么,但我需要你
我有一个现有的代码库,它使用 Meteor 方法接收来自客户端的请求并在服务器上执行数据库操作。我想尝试将此项目转移到 GraphQL,但我无法理解该工作的范围,特别是这对这些 Meteor 方法意味
我正在使用 Apollo Client 并尝试构建一个提交对象的突变,该对象的一部分是子类型的数组,该数组的大小需要是动态的,但我找不到任何有关如何正确构建此数组的文档。 这是我使用手动输入的数组进行
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
我的应用程序的目标是让用户能够保存和调用要填写和编辑的表单列表。一个用户会有多个表单,一个表单将由它自己的几个字段组成。 如果我的类型是这样设置的,例如: const FormType = new G
我刚刚写完这段代码: /// Watcher to look for changes in files pub struct Watch { glob:Option, ruv:Vec, p
我做了这个: test 1 为什么.b没有激活警报? $( ".a" ).click(function() { $('div').html('test 2'); }); $( ".b" ).click
我使用 graphene-django 来获得 GrapQL API。我在我的 schema.py 中创建了一个突变: class UpdateApplication(graphene.Mutatio
我正在使用适用于 Android 的 graphql apollo 客户端。我能够使用单个字段的突变传递数据而没有任何问题。在突变中使用输入对象时,发生错误无法读取未定义的电子邮件属性。但同样的 gr
我有两个变量,一个是可变数组,另一个是不可变的。 let mutableArray = NSMutableArray(array: ["1","2","3"]) let immutableArray:
是否可以从一个突变中对另一个 graphqlType 运行一个突变?我不确定这是否是个好主意。理想情况下,最好为每种 graphql 数据类型创建突变,然后在需要时调用这些函数中的每一个。希望这能让事
我需要能够在单个请求中创建一个用户并添加它最喜欢的电影(一个对象数组,引用了 Movies 集合和他对每部电影的个人评分)。 看起来像这样的东西(伪代码) var exSchema = ` type
我一直在使用 graphql-js 的 Node 服务器中使用 GraphQL,并且 GraphQL 已被证明是一个非常有值(value)的抽象,但我遇到了一个问题。 我经常发现自己需要使用 Grap
对于任何使用过 VuexFire Vuex v2 的人。 mutations: VuexFire.mutations 这里指的是什么?答案可能很明显,但我不知道这意味着什么。那么我的实际突变去哪里了?
我是一名优秀的程序员,十分优秀!