Reactjs 错误';ref不是道具';在react组件内部的div上使用ref时
所以我使用refs的主要目的是,我可以重置可滚动div的滚动位置,这是添加内容之前div的图像 这是添加方框后的div屏幕截图: 因此,为了能够将视口保持在可滚动区域的顶部,我希望使用refs来执行ReactDOM.findDOMNode(this.songIdWrapper),然后操纵滚动顶部或使用scrollTo方法 请在下面查找代码段: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扩展组
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,但仍然收到相同的警告。我考虑了你所说的,并一直在玩一些生命周期挂钩。