2016-02-09 16 views
18
  • mam reagować kod
  • ten kod powoduje różne panele w interfejsie użytkownika.
  • po kliknięciu znacznika, funkcja ta nazywa sportsCornerPanel()
  • ale otrzymuję Uncaught TypeError jak naprawić to
  • zapewniając poniżej fragmencie kodu.
  • cały kod można zobaczyć go na skrzypcach

fragment koduUncaught TypeError: nie można odczytać własności „rekwizyty” null

sportsCornerPanel() { 
     debugger; 

     console.log("sportsCornerPanel" 
     console.log("this.props.sportsPanelState.size-->" + this.props); 

     if (this.props.sportsPanelState.size === 'hidden') { 

      if (!this.props.sportsPanelState.visible) { 
       this.props.dispatch(sportsOpenPanel()); 
      } else { 
       this.props.dispatch(sportsClosePanel()); 
      } 
     } 
    } 


    render() { 


     let sportsContent, leftNavLink; 

     if (this.props.sports-layout !== 'small') { 
      console.log("SportsBox---page loads at bigger size"); 
      console.log("SportsBox---page loads at ipad size"); 
      sportsContent = <SportsBox className="sports-header"/>; 
     } else { 
      if (this.props.sportsPanelState.visible) { 
       console.log("sportsPanelState--when it becomes small--around ipad width"); 

       sportsContent = <SportsBox className="sports-nav"/>; 
       leftNavLink = <a onClick={this.sportsCornerPanel} href="javascript:;" className="header-navLink active"></a>; 
      } else { 
       if (this.props.sports.active) { 

        console.log("SportsBox"); 

        sportsContent = <SportsBox className="sports-nav"/>; 
       } else { 

        console.log("leftNavLink--when it becomes small--around ipad width"); 

        leftNavLink = <a onClick={this.sportsCornerPanel} href="javascript:;" className="header-navLink"></a>; 
       } 
      } 
     } 


output 

Uncaught TypeError: Cannot read property 'props' of null 
+1

Dlaczego to jest znakowanym 'css' i' html'? Ponieważ jest online? –

Odpowiedz

33

Ponieważ nie używasz React.createClass w metodach klasy this nie odnosi się do instancji składnika, więc powiąż go ręcznie. Istnieje kilka sposobów:

1. Ręczne wiążą this w konstruktorze klasy

constructor(props) { 
    super(props); 
    this.sportsCornerPanel= this.sportsCornerPanel.bind(this); 
} 

2. inicjalizatory Zastosowanie ES7 działce z funkcją strzałki

sportsCornerPanel =() => { 
    debugger; 

    console.log("sportsCornerPanel" 
    console.log("this.props.sportsPanelState.size-->" + this.props); 

    if (this.props.sportsPanelState.size === 'hidden') { 

     if (!this.props.sportsPanelState.visible) { 
      this.props.dispatch(sportsOpenPanel()); 
     } else { 
      this.props.dispatch(sportsClosePanel()); 
     } 
    } 
} 

3. oprawę this na zadzwoń do witryny

W render() metody:

let sportsContent, leftNavLink; 

    if (this.props.sports-layout !== 'small') { 
     console.log("SportsBox---page loads at bigger size"); 
     console.log("SportsBox---page loads at ipad size"); 
     sportsContent = <SportsBox className="sports-header"/>; 
    } else { 
     if (this.props.sportsPanelState.visible) { 
      console.log("sportsPanelState--when it becomes small--around ipad width"); 

      sportsContent = <SportsBox className="sports-nav"/>; 
      leftNavLink = <a onClick={this.sportsCornerPanel.bind(this)} href="javascript:;" className="header-navLink active"></a>; 
     } else { 
      if (this.props.sports.active) { 

       console.log("SportsBox"); 

       sportsContent = <SportsBox className="sports-nav"/>; 
      } else { 

       console.log("leftNavLink--when it becomes small--around ipad width"); 

       leftNavLink = <a onClick={this.sportsCornerPanel.bind(this)} href="javascript:;" className="header-navLink"></a>; 
      } 
     } 
    } 
+0

dzięki za odpowiedź ... Czy możesz mi powiedzieć, jak debugujesz i dowiedziałeś się ... Że w przyszłości mogę to zrobić sam ... Jeśli powiedz mi, gdzie umieścić konsole .. Wstawię i zrozumiem –

+3

Powszechnym problemem jest użycie 'extends React.Component' zamiast' React.createClass() '. – xCrZx

+0

Ale czy możesz mi powiedzieć, jak debugujesz i dowiadujesz się ... że w przyszłości mogę tego uniknąć..problem –

0

Wygląda na to może być brakuje getDefaultProps metody na swojej React komponentu. Można rozważyć coś takiego rodzajowe, żeby zniweczyć błąd i zobaczyć, co jeszcze jest do:

getDefaultProps() { return {}; }

+0

dzięki za odpowiedź ... czy możesz to zaktualizować w moim kodzie ... to mylące –

+0

Fakt, że błąd mówi, że problem dotyczy samego komponentu reagującego, a niekoniecznie jego rekwizytów, powoduje, że myślę, że * rekwizyty * nie są problemem - czy przetestowałeś to rozwiązanie, aby sprawdzić, czy działa? –

+0

@NickZuber Czy możliwe jest uaktualnienie mojego kodu tak mylące :( –

Powiązane problemy