找回密码
 立即注册
相关推荐换一批
  1. 易语言WBOCXLib支持库源码
  2. 易语言SHDocVw支持库源码
  3. 易语言WebBrowser支持库源码
  4. 易语言WebBrowser支持库源码
  5. 易语言WebBrowser支持库源码
  6. 三星note10+港版安卓10官方固件系统ROM刷机包下载:TGY-N9750ZSU1BTA1
  7. HarmonyOS 服务组件库
  8. discuz插件 『凹凸曼』列表大图 组件版V1.6.0
  9. 易语言模块 窗口组件.ec
  10. CB 1269-95 鱼雷电动舵机组件规范
  11. GB/T 41903.1-2022信息技术 面向对象的生物特征识别应用编程接口 第1部分:体系结构
  12. GB/T 17215.675-2022电测量数据交换 DLMS/COSEM 组件 第75部分:本地网络(LN)
  13. GB/Z 17215.652-2022电测量数据交换 DLMS/COSEM 组件 第52部分:通信协议管理配电线
  14. QC/T 979-2014 汽车电气电子设备防护用防水透气组件
  15. YD/T 1813-2008 通信用光纤放大器泵浦激光器组件 第1部分: 980nm 泵浦激光器组件
  16. YD/T 1812.1-2008 10Gbit/s 同轴连接型光发射组件(TOSA)和同轴连接型光接收组件(ROS
  17. GB 8109-2023推车式灭火器
  18. YD/T 1812.2-2009 10Gbit/s 同轴连接型光发射组件(TOSA)和同轴连接型光接收组件(ROS
  19. YD/T 1812.3-2008 10Gbit/s 同轴连接型光发射组件(TOSA)和同轴连接型光接收组件(ROS
  20. GY/T 303. 5-2018 智能电视操作系统 第5部分:功能组件接口
  21. YD/T 1318-2004 1310/1550nm 短距离单纤双向组件(模块)技术条件
  22. YD/T 1247-2002 光纤模拟传输用光发射组件技术条件
  23. YD/T 1258.2-2009 室内光缆系列 第2部分:终端光缆组件用单芯和双芯光缆
  24. YD/T 1183-2002 光纤模拟传输用光接收组件技术条件
textareaNoteprops组件 | 软件设计/软件工程 2022-05-03 270 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 的算法是什么?