React JS 中 value 和 defaultValue 的真正区别是什么?

2024-02-11

在React的主页上,有最后一个example https://reactjs.org/#a-component-using-external-plugins (使用外部插件的组件)与一个textarea:

    <textarea
      id="markdown-content"
      onChange={this.handleChange}
      defaultValue={this.state.value}
    />

当我打字时,textarea得到更新。

现在,我试图改变defaultValue with value:

    <textarea
      id="markdown-content"
      onChange={this.handleChange}
      value={this.state.value}
    />

结果是一样的(就像defaultValue,即当我输入时,textarea使用更新的文本进行视觉更新)。

那么,两者之间真正的区别是什么?


我认为一个很好的例子是如果您使用硬编码字符串

使用 defaultValue 属性:

function App(){ 
  return(
    <textarea
      defaultValue="foo" // only by default foo
    />
  );
}

ReactDOM.render(<App/>, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

使用价值道具

function App(){ 
  return(
    <textarea
      value="foo" // will forever be foo
    />
  );
}

ReactDOM.render(<App/>, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

因此,虽然本段下面的代码片段可能看起来与使用相同value道具因为onChange可能会更新状态值(因此看起来正在更新defaultValue道具) - 事实并非如此。这是still不受控制的组件,将直接根据用户输入更新其值。它只是用默认值初始化this.state.value是它最初渲染的时间。

<textarea
  id="markdown-content"
  onChange={this.handleChange}
  defaultValue={this.state.value}
/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React JS 中 value 和 defaultValue 的真正区别是什么? 的相关文章

  • 使用shinyjs通过javascript在闪亮的应用程序中操作现有的Leaflet地图

    我有一个闪亮的应用程序 其中包含现有的传单地图 我希望能够在渲染后使用自定义 javascript 通过shinyjs包裹 一个最小的例子如下 app R packages library dplyr library leaflet lib
  • 画布图像遮罩/重叠

    在我的项目中 我必须使用画布在另一个相同尺寸和图案图像上实现一个不同的颜色图像 并且图像不是圆形或矩形形状 所有这些都是波浪形状的 它将应用于单个主背景图像 以便在每个主背景图像上显示多个图形onclick功能 重叠的图像应更改为另一种选定
  • 过滤器返回 true 或 false

    我正在使用过滤器在 data it 返回对象中查找 id 它返回的对象不是 true 或 false 如果我怎样才能返回 true 或 falseval recoredId valueId var hasMatch data filter
  • IE8 中的 Javascript 消息超出堆栈空间

    我正在使用 Breeze 1 4 1 Internet Explorer 8 和 ASP NET MVC 4 Web API 我在查询时收到以下消息 查询失败 localhost port breeze Data Metadata 元数据导
  • 如何正确关闭 Node.js Express 服务器?

    我需要在收到回调后关闭服务器 auth github callback网址 与平常一样HTTP API http nodejs org docs latest api http html关闭 服务器目前支持server close call
  • Angular UI.Bootstrap 单选按钮在 ng-repeat 中表现得很奇怪[重复]

    这个问题在这里已经有答案了 我在 Angular 的 ui bootstrap 中动态生成无线电模型的选项时遇到问题 我想我可以简单地对数组进行 ng repeat 使用 btn radio 属性的内容 如下所示 in the contro
  • 如何防止在达到一定字符数后向文本区域输入内容?

    使用下面的代码 任何超过指定最大值的输入都将被删除 但这会产生一种效果 即键入字符后立即将其删除 我宁愿简单地阻止输入字符
  • Javascript 访问 Disqus 评论文本框?

    我正在开发一个浏览器扩展 它应该允许我访问文本框中的评论 帖子 现在很多网站都使用 Disqus 作为评论方式 但在输入文本时我无法找到访问 Disqus 评论框的方法 Disqus API 也没有透露太多信息 有人知道访问它的方法吗 解决
  • jQuery 面板滑块通过单击按钮打开但不会关闭

    我的页面上有一个按钮 可以使用 jquery 和 Modernizr 框架打开右侧面板 按钮位于屏幕最右侧 单击时 它会向左滑动并打开打开的面板 问题是 再次单击时它不会滑回到原来的位置 HTML div class cd panel fr
  • 如何从普通 JavaScript 中的输入获取对象

    例如 我有 3 个输入
  • 当元素具有多个类时如何在 switch 语句中检查 className

    在下面的示例中 我只想单击该选项以在警报中显示 我正在尝试使用 switch 语句来确定单击了哪个类 如果我的 div 不包含多个类 则我的示例将有效 我尝试使用classList contains在我的 switch 语句中无济于事 有没
  • NodeJS 中的缩进多行日志记录

    我要打印JSON stringify d 反对控制台 将上下文作为 Mocha 测试套件输出的一部分 当测试缩进时 我希望对象日志行向右缩进足够远 例如 3 4 个制表符空格 以便它们可以识别地位于右侧describe group 我怎样才
  • router.navigate 使用查询参数 Angular 5

    我在使用查询参数路由到路由时遇到问题我有一个像这样的函数 goToLink link this router navigate link split 0 queryParams this sortParams link 和这个功能 sort
  • 在 HTML5 画布上创建颜色选择器

    如何在 HTML5 画布上绘制颜色选择器 一个基本的例子是使用getImageData http jsfiddle net eGjak 60 http jsfiddle net eGjak 60 var ctx cv get 0 getCo
  • Webpack:如何使用动态捆绑组合两个完全独立的捆绑包

    我花了很多时间研究这个问题 但毫无结果 我知道代码分割和动态捆绑在 Webpack 中如何使用import承诺API 然而 我的用例是我有两个完全独立的包 使用不同的 webpack 版本分别生成 为了给您提供视角 我正在构建 React
  • 在64位环境中加载32位进程

    我有以下几个问题 CHM 是 编译的 HTML 文件 我的 CHM 文件有一个启动 32 位应用程序的链接 CHM 文件是用 Javascript 编码的 这在 32 位操作系统环境中运行良好 但这在 64 位操作系统环境中不起作用 原因是
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示
  • 谷歌地图绘制两点之间的路线

    我编写了这段无辜的 JavaScript 代码 它允许用户创建两个标记并绘制它们之间的路线 它不起作用 相反 它给出了一个奇怪的错误 Uncaught TypeError Cannot read property ya of undefin
  • 当 jQuery .remove() 用于删除脚本标签时,它是否会清除加载的 JavaScript?

    正如标题所示 如果我使用以下命令从 DOM 中删除脚本标签 scriptid remove javascript 本身是保留在内存中还是被清除了 或者 我完全误解了浏览器处理 javascript 的方式吗 这是很有可能的 对于那些对我提问
  • 在 React 中使用 setTimeout() 并测试它

    我意识到我一直在使用setTimeout 在我的项目中 也许 比我应该做的更多 我进行了快速研究并浏览了 Github 上的一些开源 React 项目 并决定我应该询问一下 I use setTimeout主要是为了更改类名或添加样式以对

随机推荐

  • MethodInfo.Invoke参数顺序

    我正在尝试使用反射调用方法 像这样的事情 method Invoke instance propValues ToArray 问题是没有办法确保参数数组的顺序正确 有没有办法通过名称来指定哪些值适用于哪个参数 或者我真的必须制作一个定制活页
  • 允许调试器;某些文件中的语句,使用 ESLint

    假设我想使用这个规则 https eslint org docs rules no debugger https eslint org docs rules no debugger 但是 我想在其中保留大约 15 个文件 声明 我可以在 t
  • 将额外的系统属性添加到 Eclipse 编程重启

    我有一个插件 可以使用以下命令强制重新启动 Eclipse Workbench getInstance restart 但是 我需要重新启动以包含新的环境变量 eclipse refreshBundles true 有什么方法可以仅为下次重
  • 无法在 Python 3.6.6 上的 Open CV 3.4.1 上运行跟踪

    我尝试在 python 3 6 6 上使用 open CV 运行跟踪 但它显示 AttributeError 模块 cv2 没有属性 TrackerKCF create 我也尝试了 python 2 7 API 但结果相同 Attribut
  • 使用 mongodb 聚合框架计算频率

    我正在尝试根据 10 秒的间隔计算数据库中文档的频率 这就是我的数据库对象的样子 created at 2014 03 31T22 30 48 000Z id 450762158586880000 id 5339ec9808eb125965
  • 带区域的 Orchard/MVC WCF 服务 URL

    Bertrand 创建了一个博客post http weblogs asp net bleroy archive 2011 04 20 orchard 1 1 what s in it for developers aspx指定如何在 Or
  • 如何在 gcc 中强制执行 C89 风格的变量声明?

    我工作的代码库主要是 C 和一点点 C 并且主要是用 gcc 构建的 但有时需要用 MSVC 构建 微软的 C 编译器仍然是 C89 带有一些小的扩展 并且它仍然不支持混合代码和变量定义 laC C99 因此 我需要找到一种方法来防止开发人
  • Android 键盘显示后 jQuery 移动页脚或视口大小错误

    我的 jquery 移动网络应用程序遇到以下问题 我的 jquery 应用程序有一个固定的页脚 但是当 android 键盘打开时 即单击浏览器栏并手动重新加载页面时 视口似乎仅从顶部 浏览器栏下方 向下到上部键盘边缘 然后页面重新加载 视
  • 对于特殊字符,URL 编码失败。 #安卓

    我正在研究需要的解决方案encode串入utf 8格式 这个字符串只是我正在读取的设备名称BluetoothAdapter getDefaultAdapter name 对于其中一个示例 我得到了一个像这样的字符串ABC and encod
  • Angular 指令 ng-if 不评估条件语句

    我是 Web 开发和 AngularJS 的新手 我尝试使用指令 ng if 仅在从数据库返回的列表大于 1 时显示 div 块 但它不起作用 我是否滥用了该指令 我环顾四周 没有找到任何有效的解决方案 目前 两个 div 都会显示 并且
  • 通过 Karma 运行时如何调试 PhantomJS

    我通过 Jasmine Karma 和各种浏览器进行测试 我目前正在调试一个仅在 PhantomJS 中失败的测试 我想调试这个调用 所以我在 karma 中设置了一个自定义 PhantomJS 启动器 它在调试端口打开的情况下运行它 我可
  • 检测圆形(非精确圆形)路径算法?

    我收到一个路径 来自触摸事件的 x y 坐标列表 如何检测该路径形成圆形路径 不是完整或精确的圆 有什么算法或方法可以检测到这一点吗 这是一篇论文 总结了将圆拟合到数据的各种方法 http www cs bsu edu homepages
  • ios metal:着色器中使用的变量数量限制

    在向着色器添加一些复杂性后 我今天开始收到以下错误 Execution of the command buffer was aborted due to an error during execution Discarded victim
  • 多个视图控制器上的相同 UIProgressView

    PREAMBLE 我有一个 iOS 应用程序 有两个页面的注册过程 我在每个页面上安装了一个 UIProgressView 来测量用户在所述注册过程中的累积进度 目前 注册过程由六个字段组成 当文本字段完成编辑时 现有的 UIProgres
  • 使用 Moq 可以验证匿名类型的方法调用吗?

    我正在尝试使用 Moq 验证方法调用 但我无法完全正确地理解语法 目前 我已将此作为我的验证 repository Verify x gt x ExecuteNonQuery fav AddFavorites new fid 123 inp
  • 如何删除 bash 中多余的空格?

    如何删除变量中多余的空格HEAD HEAD how to remove extra spaces Result how to remove extra spaces 尝试这个 echo HEAD tr s 或者也许您想将其保存在变量中 NE
  • Ajax 没有 JQuery? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在没有jquery的情况下进行ajax调用 https stackoverflow com questions 8567114 how to make an ajax call without j
  • AWS CLI 命令适用于 Bash,但不适用于 PHP shell_exec()

    我想触发以下命令 aws route53 change resource record sets hosted zone id XXX change batch Comment 2018 06 19 11 31 Changes Action
  • IOHIDEventSystemClientScheduleWithRunLoop 与 EXC_BAD_ACCESS

    我正在尝试在我的应用程序中获取触摸事件 所以我使用 IOHIDFamily 回调来获取事件 我的代码是这样的 void handle event void target void refcon IOHIDServiceRef service
  • React JS 中 value 和 defaultValue 的真正区别是什么?

    在React的主页上 有最后一个example https reactjs org a component using external plugins 使用外部插件的组件 与一个textarea