Reactjs 错误';ref不是道具';在react组件内部的div上使用ref时

Reactjs 错误';ref不是道具';在react组件内部的div上使用ref时,reactjs,dom,jsx,react-dom,refs,Reactjs,Dom,Jsx,React Dom,Refs,所以我使用refs的主要目的是,我可以重置可滚动div的滚动位置,这是添加内容之前div的图像 这是添加方框后的div屏幕截图: 因此,为了能够将视口保持在可滚动区域的顶部,我希望使用refs来执行ReactDOM.findDOMNode(this.songIdWrapper),然后操纵滚动顶部或使用scrollTo方法 请在下面查找代码段: import React,{Component}来自'React'; 从“react dom”导入react dom; 类AddPlaylist扩展组

所以我使用refs的主要目的是,我可以重置可滚动div的滚动位置,这是添加内容之前div的图像

这是添加方框后的div屏幕截图:

因此,为了能够将视口保持在可滚动区域的顶部,我希望使用refs来执行ReactDOM.findDOMNode(this.songIdWrapper),然后操纵滚动顶部或使用scrollTo方法

请在下面查找代码段:

import React,{Component}来自'React';
从“react dom”导入react dom;
类AddPlaylist扩展组件{
建造师(道具){
超级(道具);
此.state={
displaySearch:false,
id:“”,
播放名:“”,
播放列表标题:“”,
歌曲:[]
}
this.handleIdSubmit=this.handleIdSubmit.bind(this);
this.handleIdChange=this.handleIdChange.bind(this);
this.handleNamechange=this.handleNamechange.bind(this);
this.handlenamesmit=this.handlenamesmit.bind(this);
this.callback=this.callback.bind(this);
}
组件将更新(){
log(ReactDOM.findDOMNode(this.songIdWrapper));
}
组件更新(){
}
回调(songId){
this.songIdWrapper=songId;
}
渲染(){
返回(
{this.state.submittedName?

{this.state.playlityTitle}

:null} {this.state.songs.map((song,i)=>{ 返回( {宋}

) })} ) } handleIdSubmit(事件){ event.preventDefault(); const newState=this.state.songs.slice(); newState.push(this.state.id); 这是我的国家({ 歌曲:newState }) } handleIdChange(事件){ 这是我的国家({ id:event.target.value }) } handleNamechange(事件){ 这是我的国家({ 播放名称:event.target.value }) } handleNameSubmit(事件){ event.preventDefault(); 这是我的国家({ playltitle:this.state.playlingname }) } }
导出默认播放列表我猜问题在于您试图访问componentWillUpdate挂钩中的ref。因为从纯设置来看,没有任何错误

componentWillUpdate钩子在下一个渲染周期之前被实际调用,这意味着您在渲染组件之前访问ref,这意味着您总是在渲染周期之前访问ref。ref将在下一个渲染周期中更新


我认为你应该在组件更新后做滚动位置处理,而不是在组件更新之前

检查了吗?我确实看了这个,但没有用。如果我使用一个字符串作为引用,然后通过this.refs.string引用它,它仍然会给出相同的错误。我认为通过使用回调,您可以通过使用this关键字和为添加到类中的属性选择的名称来访问它。您正在运行哪个版本的react?版本:16.0.0,我无法用16.0.0上运行的同一代码重现此问题。我已使用componentdidMount和componentDidUpdate中的ref尝试了findDOMNode,但仍然收到相同的警告。我考虑了你所说的,并一直在玩一些生命周期挂钩。