【问题标题】:Pass ref to function with looped id?将 ref 传递给具有循环 ID 的函数?
【发布时间】:2019-05-12 07:47:23
【问题描述】:

我正在尝试创建一个非常简单的 CMS,它允许用户更新页面上的某些区域。

我有一个h3 标记,我希望能够将引用传递给我的onChange 函数,以便我可以获取它的innerHTML 文本(由contentEditable 更改)并传递被更改的新数据到我的后端服务器。但是,我无法获取想要更改的正确循环 h3 的 innerHTML(新数据的)。

我在网上阅读了 ref 可以帮助我解决这个问题的文档,但它只给了我一个示例,说明它在 render 方法中的位置,而不是如何将它传递给 ref 中的函数。

简而言之,我希望能够用新数据修改我的 h3 标签(在 cms 内)并将其发送到我的后端服务器以上传到我的数据库。

另外,我尝试不把它放在函数中,我设法访问 myRef.current 但是在控制台中它显示为 null 我希望能够访问指定的引用blogTopic Id,所以我知道我要发送到我的后端服务器的映射 id。

我有很多代码,所以我只展示我卡住的部分:

class Blogtopics extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
    this.state = {
      blogData: [],
      blogTopic: "",
    };
  }

  Selectblogtopics = async () => {
    const blogTopics = await blogtopicsService.selectblogTopics();

    this.setState({
      blogData: blogTopics
    });
  };

  editorData = (event, content) => {
    let data = content.getData();

    //this.setState({ blogContent: data });
  };

  onChange = (event, content) => {
    const node = this.myRef;
    //where im stuck
    console.log(node);
  };

  render() {
    const node = this.myRef;

    console.log(node);
    return (
      {this.state.blogData.map((rows, index) => (
        <div className="blogWrapper" key={uuid()}>
            <div className="col-md-6">
              <h3
                suppressContentEditableWarning
                contentEditable={this.state.isEditing}
                style={
                  this.state.isEditing === true
                    ? { border: "1px solid #000", padding: "5px" }
                    : null
                }
                onInput={e => this.onChange(e)}
                ref={e => this.onChange(e, this.myRef)}
                //onBlur={e => this.onChange(e)}
              >
              {rows.blog_category}
        </div>
      ))}
    );
  }
}

export default Blogtopics;

【问题讨论】:

  • 你为什么不像ref={this.myRef}那样做?
  • 因为我不需要在函数内部使用它吗?我要做的是在值发生更改时(由 cms 内的用户)获取我的 h3 的 innerHTML。如果我只是做ref={this.myRef},它会在组件立即安装时获取引用。

标签: reactjs


【解决方案1】:
onChange = (event) => {
  const nodeContent = this.myRef.current.innerHTML;
  console.log(nodeContent);
};

<h3 ... ref={this.myRef} onInput={this.onChange} ... >

会起作用。但是由于onInput 传递了目标元素,您甚至不需要使用ref

onChange = ({ target }) => {
    console.log(target.innerHTML);
}

<h3 onInput={this.onChange} >

【讨论】:

  • 谢谢,我明白我做错了什么。我忘记了 {} 里面我试图在我的 onChange 函数中传递的内容。谢谢!不知道为什么我被投了这么多票。也许我问这个问题的方式不清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 2017-10-30
  • 2012-07-29
  • 2015-11-10
  • 2020-02-17
  • 2019-06-18
相关资源
最近更新 更多