I would like to show TopicsList
ponent when user clicks on SingleTopicBox
ponent and hide SelectedTopicPage
ponent. However, i'm getting error: Uncaught TypeError: Cannot read property 'bind' of undefined
on topic-list.jsx file.
main-controller.jsx
import {React, ReactDOM} from '../../../build/react';
import TopicsList from '../topic-list.jsx';
import SelectedTopicPage from '../selected-topic-page.jsx';
import topicPages from '../../content/json/topic-pages.js';
export default class MainController extends React.Component {
state = {
isTopicClicked: false,
topicPages
};
onClick(topicID) {
this.setState({isTopicClicked: true});
this.setState({topicsID: topicID});
};
render() {
return (
<div className="row">
{this.state.isTopicClicked
? <SelectedTopicPage topicsID={this.state.topicsID} key={this.state.topicsID} topicPages={topicPages}/>
: <TopicsList/>}
</div>
);
}
};
topic-list.jsx
import {React, ReactDOM} from '../../build/react';
import SingleTopicBox from './single-topic-box.jsx';
import SelectedTopicPage from './selected-topic-page.jsx';
import topicPages from '../content/json/topic-pages.js';
export default class TopicsList extends React.Component {
onClick(){
this.props.onClick.bind(null, this.topicID);
},
render() {
return (
<div className="row topic-list">
<SingleTopicBox topicID="1" onClick={this.onClick} label="Topic"/>
<SingleTopicBox topicID="2" onClick={this.onClick} label="Topic"/>
<SingleTopicBox topicID="3" onClick={this.onClick} label="Topic"/>
<SingleTopicBox topicID="4" onClick={this.onClick} label="Topic"/>
</div>
);
}
};
single-topic-box.jsx
import {React, ReactDOM} from '../../build/react';
export default class SingleTopicBox extends React.Component {
render() {
return (
<div>
<div className="col-sm-2">
<div className="single-topic" data-topic-id={this.props.topicID}>
{this.props.label} {this.props.topicID}
</div>
</div>
</div>
);
}
};
I would like to show TopicsList
ponent when user clicks on SingleTopicBox
ponent and hide SelectedTopicPage
ponent. However, i'm getting error: Uncaught TypeError: Cannot read property 'bind' of undefined
on topic-list.jsx file.
main-controller.jsx
import {React, ReactDOM} from '../../../build/react';
import TopicsList from '../topic-list.jsx';
import SelectedTopicPage from '../selected-topic-page.jsx';
import topicPages from '../../content/json/topic-pages.js';
export default class MainController extends React.Component {
state = {
isTopicClicked: false,
topicPages
};
onClick(topicID) {
this.setState({isTopicClicked: true});
this.setState({topicsID: topicID});
};
render() {
return (
<div className="row">
{this.state.isTopicClicked
? <SelectedTopicPage topicsID={this.state.topicsID} key={this.state.topicsID} topicPages={topicPages}/>
: <TopicsList/>}
</div>
);
}
};
topic-list.jsx
import {React, ReactDOM} from '../../build/react';
import SingleTopicBox from './single-topic-box.jsx';
import SelectedTopicPage from './selected-topic-page.jsx';
import topicPages from '../content/json/topic-pages.js';
export default class TopicsList extends React.Component {
onClick(){
this.props.onClick.bind(null, this.topicID);
},
render() {
return (
<div className="row topic-list">
<SingleTopicBox topicID="1" onClick={this.onClick} label="Topic"/>
<SingleTopicBox topicID="2" onClick={this.onClick} label="Topic"/>
<SingleTopicBox topicID="3" onClick={this.onClick} label="Topic"/>
<SingleTopicBox topicID="4" onClick={this.onClick} label="Topic"/>
</div>
);
}
};
single-topic-box.jsx
import {React, ReactDOM} from '../../build/react';
export default class SingleTopicBox extends React.Component {
render() {
return (
<div>
<div className="col-sm-2">
<div className="single-topic" data-topic-id={this.props.topicID}>
{this.props.label} {this.props.topicID}
</div>
</div>
</div>
);
}
};
Share
Improve this question
edited Feb 9, 2016 at 15:11
Felix Kling
817k181 gold badges1.1k silver badges1.2k bronze badges
asked Feb 9, 2016 at 11:03
Rahul DagliRahul Dagli
4,50216 gold badges51 silver badges89 bronze badges
1 Answer
Reset to default 4You have several mistakes
You should pass
onClick
toTopicsList
render() { return ( <div className="row"> {this.state.isTopicClicked ? <SelectedTopicPage topicsID={this.state.topicsID} key={this.state.topicsID} topicPages={topicPages} /> : <TopicsList onClick={ this.onClick.bind(this) } />} </div> ); }
remove
onClick
method fromTopicsList
onClick() { // ... },
pass
onClick
callback fromprops
<SingleTopicBox topicID="1" onClick={this.props.onClick} label="Topic"/>
add to
SingleTopicBox
onClick
event<div className="single-topic" data-topic-id={this.props.topicID} onClick={ () => this.props.onClick(this.props.topicID) } > {this.props.label} {this.props.topicID} </div>
you don't need call
setState
twiceonClick(topicID) { this.setState({ isTopicClicked: true, topicsID: topicID }); }
Example
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1742309033a4419517.html
评论列表(0条)