Реагировать на массив фильтров на основе this.props.params.id

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть следующий компонент:

 import React from 'react';

import porgectsCollection from './../data/projectInfo.js';

class SingleProject extends React.Component {
  getProjectId() {
    let projectID = porgectsCollection.filter(el => {
        return (el.title = {this.props.params.id});
    });
  }
  render () {
    console.log(this.getProjectId);
    return (
        <div>
            <h2>{this.props.params.id}</h2>
        </div>
    );
  }
}

export default SingleProject;
  

и мои routes.jsx следующим образом:

 import React from 'react';
import { Route, Router, IndexRoute } from 'react-router';
import ReactDOM from 'react-dom';

import Wrapper from './../wrapper.jsx';
import Home from './../home.jsx';
import Projects from './../projects.jsx';
import SingleProject from './../singleProject.jsx';

ReactDOM.render((
    <Router>
        <Route component={Wrapper} >
            <Route path="/" component={Home} />
            <Route path="projects" component={Projects} />
            <Route path="projects/:id" component={SingleProject} />
        </Route>
    </Router>
), document.getElementById('app'));
  

На основе идентификатора, переданного в:

 <Route path="projects/:id" component={SingleProject} />
  

Я хочу получить это значение и отфильтровать массив, поступающий из:

 import porgectsCollection from './../data/projectInfo.js';
  

Затем я пытаюсь использовать эту функцию:

   getProjectId() {
    let projectID = porgectsCollection.filter(el => {
        return (el.title = {this.props.params.id});
    });
  }
  

для отображения правильных данных.

Я не уверен, что это правильный подход, однако я также получаю сообщение об ошибке при запуске webpack:

неожиданный токен, ссылающийся на {this.props.params.id }

Комментарии:

1. {this.props.params.id } фигурные скобки не требуются, фигурные скобки используются только тогда, когда вы хотите исправить javascript внутри jsx, как вы сделали в <h2>{this.props.params.id }</h2>

Ответ №1:

Вам не нужны скобки — это просто обычная функция JS:

   getProjectId() {
    let projectID = porgectsCollection.filter(el => {
        return el.title === this.props.params.id;
    });
  }
  

Немного более яркое форматирование:

   getProjectId() {
    return porgectsCollection.filter(el => el.title === this.props.params.id);
  }
  

(также вы допустили опечатку в «проектах», но я оставил ее последовательной)