gpt4 book ai didi

javascript - React 中动态生成组件的引用?

转载 作者:行者123 更新时间:2023-12-02 20:26:17 24 4
gpt4 key购买 nike

下面的代码是解释我的问题的最小工作示例。此代码使用 Array.map 生成 3 个 Note 组件,当您在其中按 Enter 时,它会使用对其 DOM 元素的引用来清空它们上面静态生成的 Note 组件。

我想做的是将您按回车键的注释本身设为空。我认为这需要为每个 Note 生成一个包含 {id, ref} 的动态数组,因此我可以将 Note id 传递给handleKeyDown,然后在 refs 数组中搜索该 id 并使用相应的 ref 来更改 DOM 元素。但我无法弄清楚如何实际做到这一点。

我意识到在这里使用 refs 是没有必要的,但这只是一个示例,因为我的实际代码要长得多并且调用 focus()。

import React, { Component } from "react";
import "./App.css";

class App extends Component {
constructor() {
super();
this.notes = [
{ text: "Hello world 1", id: 1 },
{ text: "Hello world 2", id: 2 },
{ text: "Hello world 3", id: 3 }
];
this.ref = React.createRef();
}

handleKeyDown = event => {
if (event.key === "Enter") {
event.preventDefault();
this.ref.current.textContent = "";
}
};

render() {
return (
<div>
<Note
text={"StaticNote"}
key={0}
id={0}
handleKeyDown={this.handleKeyDown}
innerRef={this.ref}
/>
{this.notes.map(note => (
<Note
text={note.text}
key={note.id}
id={note.id}
handleKeyDown={this.handleKeyDown}
/>
))}
</div>
);
}
}

class Note extends Component {
render() {
return (
<p
ref={this.props.innerRef}
contentEditable
onKeyDown={this.props.handleKeyDown}
>
{this.props.text}
</p>
);
}
}

export default App;

最佳答案

您需要为所有 Note 组件存储一个单独的引用,然后将焦点中的 Note 的索引传回给 handleKeyDown 函数

import React, { Component } from "react";
import "./App.css";

class App extends Component {
constructor() {
super();
this.notes = [
{ text: "Hello world 1", id: 1, ref: React.createRef() },
{ text: "Hello world 2", id: 2, ref: React.createRef() },
{ text: "Hello world 3", id: 3, ref: React.createRef() }
];
}

handleKeyDown = (event, index) => {
if (event.key === "Enter") {
event.preventDefault();
this.notes[index].ref.current.textContent = "";
}
};

render() {
return (
<div>
<Note
text={"StaticNote"}
key={0}
id={0}
handleKeyDown={this.handleKeyDown}
innerRef={this.ref}
/>
{this.notes.map((note, index) => (
<Note
index={index}
innerRef = {note.ref}
text={note.text}
key={note.id}
id={note.id}
handleKeyDown={this.handleKeyDown}
/>
))}
</div>
);
}
}

class Note extends Component {
render() {
return (
<p
ref={this.props.innerRef}
contentEditable
onKeyDown={(e) => this.props.handleKeyDown(this.props.index)}
>
{this.props.text}
</p>
);
}
}

export default App;

关于javascript - React 中动态生成组件的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53368828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com