通常,当我单击子组件中的菜单项时,它会调用{this.handlesort},这是一个本地函数。句柄排序从父组件接收onReorder道具。{onReorder}调用名为reOrder的本地函数。它设置{orderBy and orderDir}的状态。问题是,当我单击{menuitem}时,它立即返回此错误。(未捕获的TypeError:无法读取未定义的属性“onReOrder”)。通常,当我不使用es6时,它可以工作。请帮忙
(父组件)
export default class TenantView extends Component {
constructor(props) {
super(props);
//setting state
this.state = {
//tenants: [],
orderBy: 'name',
orderDir: 'asc',};
};
componentWillMount() {
this.setState({
tenants:[{img: 'tenant1.jpg',name: 'John', address: '7 Gilbert',
paid: 'true'},{img: 'tenant2.jpg',name:'Abba', address:
'3 Vecq st', }]});//setState
}//componentWillMount
reOrder(orderBy, orderDir) {
this.setState({
orderBy: orderBy,
orderDir: orderDir,
});//setState
}//reorder
render(){
var tenants = this.state.tenants;
var orderBy = this.state.orderBy;
var orderDir = this.state.orderDir;
tenants = _.orderBy(tenants, function(item) {
return item[orderBy].toLowerCase();
}, orderDir);//orderBy
tenants = tenants.map(function(item, index){
return (
<TenantList key = { index } singleTenant = { item } />
)
}.bind(this))
return(
<div style={styles.root}>
<Subheader>Payment Status</Subheader>
<PaymentStatus/>
<SearchTenant
orderBy = { this.state.orderBy }
orderDir = { this.state.orderDir }
onReOrder = { this.reOrder }
/>
<GridList cols={1} cellHeight={80} style={styles.gridList}>
{tenants}
</GridList>
</div>
)//return
}//render
}
儿童成分
export default class SearchTenant extends Component {
handleSort(e){
this.props.onReOrder(e.target.id, this.props.orderDir)
}//handleSort
handleOrder(e){
this.props.onReOrder(this.props.orderBy, e.target.id)
}//handleSort
render(){
return(
<div className="input-group">
<input placeholder="Search" type="text" onChange = {
this.handleSearch } className= "validate"/>
<DropDownMenu openImmediately={true}>
<MenuItem id = "name" onClick = {this.handleSort}>Name{ (
this.props.orderBy === 'name') ? <i
className="material-icons">check_circle</i>: null }
</MenuItem>
<MenuItem id = "address" onClick =
{this.handleSort}>Address{
(this.props.orderBy === 'address') ? <i
className="material-
icons">check_circle</i>: null }
</MenuItem>
<MenuItem id = "asc" onClick = {this.handleOrder}>Asc{
(this.props.orderDir === 'asc') ? <i
className="material-icons">check_circle</i>: null }
</MenuItem>
<MenuItem id = "desc" onClick = {this.handleOrder}>Desc{
(this.props.orderDir === 'desc') ? <i
className="material-icons">check_circle</i>: null }
</MenuItem>
</DropDownMenu>
</div>
)//return
}//render
}//TeamList
问题在于您所指的this
内部handleSort
和handleOrder
不是指组件的this,而是指内部方法this。
这个问题有两个解决办法。
在组件的构造函数中使用组件的this绑定函数:
export default class SearchTenant extends Component {
constructor() {
this.handleSort = this.handleSort.bind(this)
this.handleOrder = this.handleOrder.bind(this)
}
// rest of the code
}
或者使用ES6的箭头函数,该函数提供词法范围:
export default class SearchTenant extends Component {
handleSort = () => {
this.props.onReOrder(e.target.id, this.props.orderDir)
}
}
您必须确保正确绑定传递给内联事件处理程序的函数,以便它们内部的调用能够正确引用组件作用域的this
:
在组件中定义以下构造函数:
constructor (props){
super (props):
this.handleSort = this.handleSort.bind(this);
this.handleOrder = this.handleOrder.bind(this);
}
请注意,我在react ProductScreen.js中呈现动态数据时有问题 注意,...数据在product.js中呈现得很好,但相同的数据在productscreen.js中不会呈现,因为productscreen.js链接是通过“id”呈现的。 谢谢app.js 导入“./homescreen.css”;从'../Components/Product'导入产品从'React'导入{useE
我有一个坦珀猴子脚本,它为基于浏览器的游戏添加了一些信息。我使用一段简单的代码,根据玩家的语言环境将一千个分隔符添加到数字中: 此函数在许多代码中使用,例如: 这已经完美工作了很长时间,但是由于某种原因,在游戏运行的一个特定平台上,脚本现在拒绝加载,并给出以下错误信息: 无法读取未定义的属性“ToLocalString” 我已经回顾了几十个版本,以确保它不是我最近添加或更改的东西,老实说,我甚至不
问题内容: 我是新来的反应和反应路由器。 react的问题在于,在我的应用程序的某些页面上,react-router正在运行,并且出现一些类似的错误:“无法读取未定义的属性’push’”。 我正在使用反应0.14.1 我的路由代码如下所示: 我的组件现在是这样的: 谁能帮我这个?谢谢。 问题答案: 您的应用程序中没有提供支持的Router实例。 我假设您要导入withRouter以获取Router
问题内容: 我是一个非常新的反应者,我正在尝试从Rails api导入数据,但出现错误 如果我使用react dev工具,则可以在控制台中看到状态,也可以看到联系人,方法是使用有人可以帮忙解决我做错的事情吗?我的组件看起来像这样: 问题答案: 无法读取未定义的属性“ map”,为什么? 因为最初是,并且of 将是 不确定的 。重要的一点是, componentDidMount 将在初始渲染后被调用
出于某种原因,我得到了错误“react-nable read属性'set state'的undefined”。因此,this.state永远不会用用户输入的值更新。当我尝试注释掉的绑定时,我会出现奇怪的行为,无法输入用户名,也不再得到null错误,但值只是未定义。如有任何帮助,不胜感激。谢了。