2017-06-29 11 views
0

私は自分のコンポーネントに(それがnavbarにあるように)検索バーを持っていて、Session.setを使って別のコンポーネントで使用する変数を作成しますセッション変数を使用して反応流星の検索バーからmongoコレクションを照会

updateSearch(e){ 


Session.set('searchTerm', e.target.value); 
    console.log(Session.get('searchTerm')); 
} 

render(){ 
    return(
    <div> 
     <form> 
      <div className="form-group"> 
       <input type="text" className="form-control" placeholder="Search Tickets" 
       // value={this.state.search} 
       onChange={this.updateSearch.bind(this)}/> 
      </div> 
     </form> 
    </div> 
) 
} 
} 

これにより、検索語が入力されたときに正常に作成されます。問題は、コレクションのリストを表示するためにリストコンポーネントの変数 'searchTerm'を使用しようとするときです。

import { Tickets } from '../../../imports/collections/tickets'; 
import TicketSearch from './TicketSearch'; 

export default class TicketList extends React.Component { 
    constructor (props) { 
     super(props); 
     this.state = { 
     tickets: [], 
     searchTerm: '' 
     }; 
    } 

    componentDidMount() { 
     this.ticketTracker = Tracker.autorun(() => { 
     Meteor.subscribe('tickets'); 
     let searchTerm = Session.get('searchTerm'); 
      if (searchTerm) { 

        let tickets = Tickets.find({$in: { talent: searchTerm}}).fetch() 
        this.setState({ tickets }); 
       } 
       else { 

      let tickets = Tickets.find({}).fetch(); 
      this.setState({ tickets }); 
     } 
     }); 
    } 

    componentWillUnmount() { 
     console.log('componentWillUnmount TicketList'); 
     this.ticketTracker.stop(); 
    } 

    renderTicketList() { 
     if (!this.state.tickets.length) { 
      return (
      <div> 
       <p>No Tickets Found</p> 
      </div> 
     ) 
     } 

     return this.state.tickets.map((ticket) => { 

    return (
      <div> 
        {ticket.talent} 
        {ticket.city}  
       </div> 
      ) 

    render() { 
    return(
     <div> 
      {this.renderTicketList()} 
     </div> 
    ); 
    } 
}; 

チケットリストコンポーネントは、検索バーに何かが入力される(その部分が機能している)まで、すべてのチケットを表示する必要があります。検索バーを使用した後、理想的には、searchTermはコレクションの「才能」または「都市」フィールドに一致するチケットをフィルタリングします。あなたのコードにはタイプミスや論理的なバグが存在しないと仮定すると、

答えて

0

は、私の最初の勧告は、代わりにtracker.autorunのcreateContainer

を使用することです。コードをtracker.autorunからcreateContainer関数に移動し、searchTermをTicketListの小道具として渡します。また、setStateコードをcomponentWillReceivePropsメソッドに移動します。これは私の個人的な経験と同様の問題であり、またhttps://github.com/meteor/react-packages/issues/99を参照してください。

関連する問題