2017-11-24 5 views
2

Also das Hauptziel von mir mit Refs ist so, dass ich die Scroll-Position eines scrollbaren div zurücksetzen kann, dies ist ein Bild von der div bevor das Hinzufügen von Inhalten this is how it looks before dynamically adding divs to the scrollable container divFehler 'ref ist keine prop' wenn ref auf einem div innerhalb einer react Komponente verwendet wird

Dies ist ein Screenshot des div nach Boxen ihn hinzufügen: the box is created outside of viewport and is created at the top of the scrollable area

So in der Lage sein, das Ansichtsfenster an der Spitze des rollbaren Bereichs zu halten, ich refs zu verwenden ist die Hoffnung, Tun Sie ReactDOM.findDOMNode (this.songIdWrapper) und manipulieren Sie dann den scrollTop oder verwenden Sie scrollTo-Methoden.

Sie den Code-Schnipsel unten finden:

import React, {Component} from 'react'; 
 
import ReactDOM from 'react-dom'; 
 

 
class AddPlaylist extends Component { 
 
    constructor(props){ 
 
     super(props); 
 
     this.state = { 
 
      displaySearch: false, 
 
      id: '', 
 
      playlistName:'', 
 
      playlistTitle:'', 
 
      songs:[] 
 
     } 
 

 
     this.handleIdSubmit = this.handleIdSubmit.bind(this); 
 
     this.handleIdChange = this.handleIdChange.bind(this); 
 
     this.handleNamechange = this.handleNamechange.bind(this); 
 
     this.handleNameSubmit= this.handleNameSubmit.bind(this); 
 
     this.callback=this.callback.bind(this); 
 
    } 
 
    componentWillUpdate() { 
 
     console.log(ReactDOM.findDOMNode(this.songIdWrapper)); 
 
    } 
 
    componentDidUpdate() { 
 
     
 
    } 
 

 
    callback (songId) { 
 
     this.songIdWrapper=songId; 
 
    } 
 
    render() { 
 
     return(
 
      <div className='add-playlist-wrapper'> 
 
       <div className='form-wrapper container'> 
 
        <form onSubmit={this.handleNameSubmit} className='playlist-name-wrapper'> 
 
          <input className={this.state.submittedName ? 'hide-input' : ''} required onChange={this.handleNamechange} value={this.state.playlistName} placeholder='Playlist title'/> 
 
          {this.state.submittedName ? <p className='title'>{this.state.playlistTitle}</p> : null} 
 
        </form> 
 
        <form onSubmit={this.handleIdSubmit} className='add-id-wrapper'> 
 
         <div className='input-add-playlist'> 
 
          <input required onChange={this.handleIdChange} value={this.state.id} placeholder='Add song...'/> 
 
          <button type='submit' className='fabutton'> 
 
           <i className="add-button fa fa-plus-square-o fa-3x" aria-hidden="true"></i> 
 
          </button> 
 
         </div> 
 
        </form> 
 
        <div id='song-id-wrapper' ref={this.callback}> 
 
        {this.state.songs.map((song, i) => { 
 
         return (<div key={i} className='song'> 
 
            <p>{song}</p> 
 
           </div> 
 
         ) 
 
        })} 
 
       </div> 
 
       </div> 
 
      </div> 
 
     ) 
 
    } 
 

 
    handleIdSubmit (event) { 
 
     event.preventDefault(); 
 
     const newState = this.state.songs.slice(); 
 
     newState.push(this.state.id); 
 
     this.setState({ 
 
      songs:newState 
 
     }) 
 
    } 
 

 
    handleIdChange (event) { 
 
     this.setState({ 
 
      id: event.target.value 
 
     }) 
 
    } 
 

 
    handleNamechange (event) { 
 
     this.setState({ 
 
      playlistName: event.target.value 
 
     }) 
 
    } 
 

 
    handleNameSubmit (event) { 
 
     event.preventDefault(); 
 
     this.setState({ 
 
      playlistTitle: this.state.playlistName 
 
     }) 
 
    } 
 

 
} 
 

 
export default AddPlaylist;

Die Fehlermeldung ich erhalte, ist: this is the error message stating that ref is not a prop

So wie ich bin ganz neu zu reagieren und so weit ich M ist sich bewusst, dass dies ein Attribut für ein Div-Element ist, das nicht als Prop für eine Komponente übergeben wurde. Ich hoffe, Sie können meine Verwirrung sehen, wenn ich google/stack-overflow suche, sehe ich viele Kommentare in Bezug auf untergeordnete Komponenten. Ich bin mir völlig bewusst, dass String Refs abgeschrieben wurden und dass Callbacks verwendet werden sollten, aber egal was ich versuche, ich kann diese Fehlermeldung nicht loswerden.

Jede Hilfe würde sehr geschätzt werden.

+0

Überprüft https://stackoverflow.com/questions/38089895/react-ref-is-not-a-prop? – Dane

+0

Ich habe mir das angeschaut und es hat nicht geholfen. Wenn ich eine Zeichenkette als Referenz verwende und sie dann mit this.refs.string referenziere, bekomme ich immer noch denselben Fehler. Ich dachte, mit dem Rückruf können Sie einfach darauf zugreifen, indem Sie das Schlüsselwort this und den Namen verwenden, den Sie für die Eigenschaft ausgewählt haben, die Sie der Klasse hinzufügen. –

+0

In welcher Version von react laufen Sie? – larrydahooster

Antwort

0

Ich vermute, das Problem ist, dass Sie versuchen, auf die Ref in der KomponenteWillUpdate Hook zuzugreifen. Weil vom reinen Setup nichts falsch ist.

Der componentWillUpdate-Hook wird tatsächlich vor dem nächsten Renderzyklus aufgerufen, was bedeutet, dass Sie auf die Referenz zugreifen, BEVOR Ihre Komponente gerendert wird. Dies bedeutet, dass Sie immer auf den Ref aus dem Render-Zyklus zugreifen. Die Ref wird mit dem nächsten Render-Zyklus aktualisiert.

https://developmentarc.gitbooks.io/react-indepth/content/life_cycle/update/tapping_into_componentwillupdate.html

Ich denke, Sie sollten Umgang mit der Scroll-Position zu tun, nachdem die Komponente Update tat, nicht, bevor es aktualisiert wird!

+0

Ich habe versucht, den findDOMNode mit der ref in componentdidMount und componentDidUpdate und ich bekomme immer noch die gleiche Warnung. Ich habe über das nachgedacht, was du gesagt hast, und mit einigen der Lebenszyklus-Hooks herumgespielt. –

Verwandte Themen