Reactjs React with Redux-意外调用回调函数
我还不是反应大师,所以我的问题是。如果在子组件中,我正在输入字段中写入新字符,为什么仍然调用父函数?我只想在单击子组件中的搜索按钮时调用父方法 父组件:Reactjs React with Redux-意外调用回调函数,reactjs,react-redux,Reactjs,React Redux,我还不是反应大师,所以我的问题是。如果在子组件中,我正在输入字段中写入新字符,为什么仍然调用父函数?我只想在单击子组件中的搜索按钮时调用父方法 父组件: class MainPage extends Component { render() { let searchOffersBar = ( <MuiThemeProvider> <SearchOffer offers
class MainPage extends Component {
render() {
let searchOffersBar = (
<MuiThemeProvider>
<SearchOffer
offersFound={this.props.onOffersFound}
/>
</MuiThemeProvider>
);
let searchResults = (
<SearchResults
offers={this.props.offers}
/>
);
return (
<Aux>
<div className={classes.container}>
<Intro/>
<div className={classes.contentSection}>
{searchOffersBar}
{searchResults}
</div>
</div>
</Aux>
)
}
}
const mapStateToProps = state => {
return {
offers: state.offers.offers
}
}
const mapDispatchToProps = dispatch => {
return {
onOffersFound: (searchParams) => dispatch(actions.fetchOffersByCriteria(searchParams))
}
}
export default connect(mapStateToProps, mapDispatchToProps)(MainPage);
onOffersFound
在我的动作中,创建者看起来像:
export const fetchOffersByCriteria = (searchParams) => {
return dispatch => {
let queryParams = '?brand='+searchParams.brand + '&capacity='+searchParams.capacity;
axios.get('/getFilteredOffers' + queryParams)
.then(response => {
dispatch(saveFoundOffers(response.data)); --> saves the state
})
.catch(error => {
console.log(error);
})
}
}
我的问题是,为什么每次我在子组件中输入新字符时都会调用上述方法FetchOfferByCriteria
?我只想在单击子组件中的搜索按钮时调用此方法。也许我的方法不好
谢谢你的提示 问题是,
props.offersFound(searchCriteria)
会在每个render
调用。提交时,onSubmit
prop应该是要调用的函数。目前,它正在被立即调用
这一行:
onSubmit={props.offersFound(searchCriteria)}
应该是(或类似的):
当前,在品牌
(或容量
)字段中键入时,将调用把手
更改回调。这将调用setSearchCriteria
(状态更新),触发组件的重新呈现。当此组件重新呈现时,它会立即调用props.offersFound(searchCriteria)
,并将返回值传递给onSubmit
prop。您可能希望onSubmit
prop是在提交时调用的函数
有关更多的de3tails,请参阅。问题是,
props.offersFound(searchCriteria)
在每次渲染时都会被调用。提交时,onSubmit
prop应该是要调用的函数。目前,它正在被立即调用
<form
noValidate
autoComplete="off"
onSubmit={props.offersFound(searchCriteria)}>
这一行:
onSubmit={props.offersFound(searchCriteria)}
应该是(或类似的):
当前,在品牌
(或容量
)字段中键入时,将调用把手
更改回调。这将调用setSearchCriteria
(状态更新),触发组件的重新呈现。当此组件重新呈现时,它会立即调用props.offersFound(searchCriteria)
,并将返回值传递给onSubmit
prop。您可能希望onSubmit
prop是在提交时调用的函数
有关更多De3Tail,请参阅。
<form
noValidate
autoComplete="off"
onSubmit={props.offersFound(searchCriteria)}>
您将立即调用prop并尝试使用作为事件侦听器返回的结果。应该是
<form
noValidate
autoComplete="off"
onSubmit={() => props.offersFound(searchCriteria)}>
props.offersFound(searchCriteria)}>
相反
您将立即调用prop并尝试使用作为事件侦听器返回的结果。应该是
<form
noValidate
autoComplete="off"
onSubmit={() => props.offersFound(searchCriteria)}>
props.offersFound(searchCriteria)}>
相反天哪!你说得对!但有趣的是,onSubmit不起作用——点击搜索按钮后什么也没发生。仅当我将调用我的方法直接添加到搜索按钮时,它才起作用,如下所示:props.offersFound(searchCriteria)}>搜索是按钮
使用type=“submit”
呈现按钮
?(不是,type=“button”
)天哪!你说得对!但有趣的是,onSubmit不起作用——点击搜索按钮后什么也没发生。仅当我将调用我的方法直接添加到搜索按钮时,它才起作用,如下所示:props.offersFound(searchCriteria)}>搜索是按钮
使用type=“submit”
呈现按钮
?(不是,type=“button”
)