2016-05-01 2 views
6

У меня проблема. Я могу console.log this.props.routeParams.key из конструктора. Но когда вне конструктора, в функции filterList, я получаю сообщение об ошибке «Uncaught TypeError: Невозможно прочитать« реквизиты »свойств неопределенного». В чем моя проблема? Почему он может читать это из конструктора, но не из функции filterList?Охват в реакторе + React Router

Я использую React Router + Flux + React.

import AltContainer from 'alt-container'; 
import React from 'react'; 
import { Link } from 'react-router'; 
import Blogger from './Blogger' 
import List from './List' 
const rootURL = 'https://incandescent-fire-6143.firebaseio.com/'; 

import BlogStore from '../stores/BlogStore' 
import BlogActions from '../actions/BlogActions'; 


export default class BlogShow extends React.Component { 
    constructor(props) { 
    super(props); 
    {console.log(this.props.routeParams.key)} 
} 


filterList(key) { 
    if (this.props.routeParams.key===key){ 
    return Blogstore.state.blog 
    } 
} 

    render() { 
      {Object.keys(BlogStore.state.blog).map(this.filterList)} 
    } 
} 

ответ

4

, что происходит, потому что ваша функция filterList не связан с вашим компонентом

Bind это в конструкторе

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

Вы читали об этом here

+0

Спасибо. Это точно верно. Не могли бы вы объяснить логику этого? – CodeYogi

+1

, как я уже сказал, если вы не привязываете функцию к вашему компоненту, «это» будет неопределенным, потому что в классах ES6 нет автообнаружения. Если ответ вам помог, вы должны его принять. – QoP

+0

Как его принять? Я нажал на зеленую галочку. Это то, что вы имеете в виду? – CodeYogi