找回密码
 立即注册
相关推荐换一批
  1. YY 0062-1991 X射线管组件固有滤过
  2. YD/T 2288.2-2011 小型化可热插拔模块(SFP)用光组件技术条件 第2部分:同轴连接型光?
  3. YD/T 2288.1-2011 小型化可热插拔模块(SFP)用光组件技术条件 第1部分:同轴连接型光?
  4. YD/T 2286-2011 10Gbit/s EPON 光线路终端/光网络单元(OLT/ONU)的单纤双向光组件
  5. YD/T 2284-2011 终端光组件用光纤带
  6. YY 0009-1990 500mA医用诊断X射线机
  7. YY 0007-1990 200mA医用诊断X射线机
  8. YY 0008-1990 300mA医用诊断x射线机
  9. YY/T 0609-2007 医用诊断X射线管组件通用技术条件
  10. YDB 025-2008 光通信用半导体激光器组件技术条件 2.5Gb/s 电吸收调制半导体激光器组
  11. YY/T 0946-2014 心脏除颤器植入式心脏除颤器用DF-1连接器组件尺寸和试验要求
  12. YY/T 0892-2013 医用诊断X射线管组件泄漏辐射测试方法
  13. YY/T 0609-2018 医用诊断X射线管组件通用技术条件
  14. YD/T 1997.3-2015 通信用引入光缆 第3部分:预制成端光缆组件
  15. YY/T 0799-2010 医用气体低压软管组件
  16. YY/T 0487-2010 一次性使用无菌脑积水分流器及其组件
  17. NB/T 42104.2-2016 地面用晶体硅光伏组件环境适应性测试要求第2部分:干热气候条件
  18. NB/T 42104.3-2016 地面用晶体硅光伏组件环境适应性测试要求第3部分:湿热气候条件
  19. NB/T 42104.1-2016 地面用晶体硅光伏组件环境适应性测试要求第1部分:一般气候条件
  20. YD/T 3092-2016 通信局(站)用接地铜排组件技术要求和检测方法
  21. YD/T 3129.2-2017 通信用集成光发射组件 第2部分:10x10Gbit/s 强度调制
  22. YD/T 3056-2016 25Gbit/s 电吸收调制激光器(EML)组件
  23. YD/T 2968-2015 光通信用 40Gbit/s PIN-TIA 光接收组件
  24. YD/T 2904.1-2015 集成可调谐激光器组件 第1部分:蝶形封装组件
textareaNoteprops组件 | 软件设计/软件工程 2022-05-03 284 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
问题
我正在尝试编写日志/组织应用程序,但遇到了令人沮丧的错误。

这是我的组件:
  1. import React from 'react';

  2. const Note = (props) => {
  3.   let textarea, noteForm;
  4.   if (props.note) {
  5.     return (
  6.       <div>
  7.         <button onClick={() => {
  8.           props.handleUpdateClick(props.selectedFolderId, props.selectedNoteId, textarea.value);
  9.         }}>
  10.           Update
  11.         </button>
  12.         <textarea
  13.           defaultValue={props.note.body}
  14.           ref={node => {textarea = node;}}
  15.         />
  16.       </div>
  17.     );
  18.   } else {
  19.     return <div></div>;
  20.   }
  21. };

  22. export default Note;
复制代码

当前的情况是,每当我在notes之间切换并重新提交note.body属性中带有新内容的note组件时,文本区域不会改变并保留上一个note的内容。我尝试过使用textarea的value属性而不是defaultValue属性,这并不能解决组件重新提交时textarea内容不改变的问题,但是当我这样做时,我&amp;#39 ;m 可以通过在 textarea 字段中输入来更新

有谁知道我既可以允许用户在文本字段中键入以更新注释,又可以在我呈现不同的注释时更改文本区域的内容的方法?

谢谢

回答
问题是将该值设置为道具将导致组件的所有重新渲染都使用相同的道具,因此新文本将被删除。一种解决方案是将文本保存在组件的本地状态中。要同时监听 props 变化,可以设置接收到新 props 时的状态。
  1. const Note = React.createClass({

  2.   getInitialState() {
  3.         return {
  4.         text : this.props.note.body
  5.     }
  6.   },

  7.   componentWillReceiveProps: function(nextProps) {
  8.     if (typeof nextProps.note != 'undefined') {
  9.         this.setState({text: nextProps.note.body });
  10.     }
  11.   },

  12.   render() {
  13.     if (this.props.note) {
  14.       return (
  15.         <div>
  16.           <button onClick={(e) => {
  17.             // Fire a callback that re-renders the parent.
  18.             // render(this.textarea.value);
  19.           }}>
  20.             Update
  21.           </button>
  22.           <textarea
  23.             onChange={e => this.setState({ text : e.target.value })}
  24.             value={this.state.text}
  25.             ref={node => {this.textarea = node;}}
  26.           />
  27.         </div>
  28.       );
  29.     } else {
  30.       return <div></div>;
  31.     }
  32.   }
  33. });
复制代码

如果您正在使用 redux,您还可以在输入的更改事件上触发一个操作以触发重新渲染。您可以将输入值保存在减速器中。





上一篇:使用python在地图图像API中的静态图像中绘制线条/路径
下一篇:为大于 5GB 的文件计算 Amazon-S3 Etag 的算法是什么?