当前位置: 首页 > 知识库问答 >
问题:

在特定指标下改变反应状态数组

公孙弘深
2023-03-14

正如标题所暗示的那样,我正在尝试以State Object中的数组为目标,但如果您尝试过,您会猜到。这并不像听起来那么简单。我在这里看了几个问题(React:我如何更新setState上的state.item[1]?(使用JSFiddle)和数组中对象键的reactjs-setstate),但这两个问题都没有解决我的问题。

我需要的是在notedata数组中指定一个特定的索引,并根据用户在notedata数组只是读取为带有空字符串的数组notedata=['']

如果需要更深入的查看,可以访问https://stackblitz.com/edit/note-taking并分叉页面,然后自己进行编辑。文件结构是愚蠢的,至少可以说。我开始使用redux并在中途决定反对它。

class NoteList extends Component {
  constructor(props) {
    super(props);
    this.state = {
      inputValue: '',
      noteName: [],
      noteData: [],
      selectedNote: []
    }
}

  handleInputValue(e) {
    this.setState({
      inputValue: e.target.value
    });
  }

  addNoteFunc(e) {
    this.setState({
      noteName: [ ...this.state.noteName, e.target.value ],
      noteData: [ ...this.state.noteData, '' ]
    });
  }

 // everytime the user types, change the value of noteData
  handleNoteData(e, index = this.state.selectedNote[0]) {
    const copyNoteData = Object.assign({}, this.state);
    copyNoteData.noteData[index] = e.target.value;

    this.setState(copyNoteData);
  }

  handleSelectedNote(index) {
    this.setState({
      selectedNote: [ index ]
    });
  }

<textarea 
  value={this.state.noteData[this.state.selectedNote[0]]}
  handleNoteData={(e, index) => this.handleNoteData(e, index)}
/>
import React from 'react';

const TextArea = props => {
  return (
    <div className='textarea'>
      <textarea 
        value={props.value}
        onKeyDown={props.handleNoteData}
      />
    </div>
  );
}

export default TextArea;

共有1个答案

杜哲彦
2023-03-14

您的代码中有错误,因为textarea不是正确的组件它应该是textarea而不是textarea是一个html元素,您首先必须将它导入notelist.js中,这就是为什么没有设置onKeyDown props的原因。

<TextArea 
   value={this.state.noteData[this.state.selectedNote[0]]}
   handleNoteData={(e, index) => this.handleNoteData(e, index = this.state.selectedNote[0])}
/>

此外,您必须将handleNoteData添加到onChange事件中,否则在onKeyDown事件中,texarea值将永远不会更改,因为您每次都将其重置为e.target.value。

试一下:https://stackblitz.com/edit/note-taking-y5hwsb?file=containers/notelist.js

 类似资料:
  • 在这个项目中,我使用了反应钩,这个片段用来改变项目的颜色主题,但有一个问题,我无法解决。常量lightTheme={...} Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eusmod tempor incidunt ut labore et dolore magna aliqua. 我的减速器:

  • 问题内容: 保持不变,尽管我在函数中调度了一个动作: 输出为NO_AUTH(的初始值) 减速器: 知道为什么吗? 问题答案: 您当前正在直接在未映射到的componentDidMount内部调度: 这应该做的工作: 现在,这将获得authState:

  • 我有一个组件连接到我的商店。该组件发送操作并正确更改状态(请参阅日志)。但我的组件应该显示此状态更改。但它不会重播。 下面是我的代码: 最后,我的组件希望在状态更改后更新state和rerender: 这样您就可以看到状态正确地改变了。但在此之后,我希望组件再次呈现(控制台和文本标记中的“rendering...”显示true而不是false) 我看不出有什么错误。你能帮帮我吗?

  • 问题内容: 我有一个这样的状态,我正在设置和标记如下: 我有一个列表,其中包含状态为类的项目: 在这里,如何更改特定div的类名? 问题答案: 以下是我相信您正在尝试做的一个功能齐全的示例(带有功能性摘录)。 根据您的问题,您似乎正在为所有元素修改1属性。这就是为什么当您单击一个时,它们全部都被更改了。 尤其要注意,状态跟踪 哪个 元素处于活动状态的索引。当被点击时,它告诉它的索引,更新,随后相应

  • 我有一个处理程序,在输入字段发生变化时触发。但是,当我将状态日志记录到控制台resData是'未定义'?这是不可能的,因为console.log(身体)确实返回结果。

  • 在这种情况下,我更改选择元素并调用数据更新方法。该方法从状态获取值。但是当数据更新时,状态还没有改变。当您再次调用数据更新时,状态已经更新了如何正确进行更新? 反应成分