Reactjs 我应该如何修复TypeError“;财产';道具';“未定义”的定义;?
当我点击[添加到购物车]按钮时,我得到一个错误: . 我该如何解决这个问题?Reactjs 我应该如何修复TypeError“;财产';道具';“未定义”的定义;?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,当我点击[添加到购物车]按钮时,我得到一个错误: . 我该如何解决这个问题? 这是我的,下面是一个与问题相关的摘要: class ProductsList extends Component { .... renderProductsList() { function mapProductCards(elem) { return ( <Card className="m-1" style={{width: '18rem'}} key={elem.
这是我的,下面是一个与问题相关的摘要:
class ProductsList extends Component {
....
renderProductsList() {
function mapProductCards(elem) {
return (
<Card className="m-1" style={{width: '18rem'}} key={elem.id}>
....
<CardText>isAvailable</CardText>
<Button onClick={() => this.props.addItemToCart(elem.id)}>Add to Cart</Button>
</CardBlock>
</Card>
)
}
....
this.props.products ....
.map(mapProductCards)
....
const mapDispatchToProps = (dispatch) => ({
....
addItemToCart(value) {
dispatch(addToCart(value));
}
....
});
export default connect(mapStateToProps, mapDispatchToProps)(ProductsList);
....
类产品列表扩展组件{
....
renderProductsList(){
功能映射产品卡(elem){
返回(
....
可用
this.props.addItemToCart(elem.id)}>添加到购物车
)
}
....
这是道具产品。。。。
.map(mapProductCards)
....
const mapDispatchToProps=(调度)=>({
....
addItemToCart(值){
调度(addToCart(价值));
}
....
});
导出默认连接(mapStateToProps、mapDispatchToProps)(ProductsList);
....
在renderProductsList函数的开头,将此
变量指定给本地变量。如下所示:
renderProductsList() {
var that = this;
function mapProductCards(elem) {
return (
renderProductsList() {
mapProductCards = (elem) => {
return (
this.props.products.map(mapProductCards, this);
然后在需要的地方使用,例如,您的按钮现在是:
<Button onClick={() => that.props.addItemToCart(elem.id)}>Add to Cart</Button>
这将保留this
对您实际需要的对象的引用
编辑
查看完整代码后,根据您使用mapProductCards
函数的方式,您需要传入正确的对象以用作this
。您可以将该对象作为第二个参数传递给map
。如下所示:
renderProductsList() {
var that = this;
function mapProductCards(elem) {
return (
renderProductsList() {
mapProductCards = (elem) => {
return (
this.props.products.map(mapProductCards, this);
您可能会在以下网站上找到超过的文档:
此参数:可选。执行回调时用作此参数的值
我也遇到了这个问题,问题是当我调试代码时,本地的这个ie函数的这个对象给出了未定义的对象。你需要实例化函数的这个对象addItemToCart,因为当你点击按钮时,它会在控制台上给你一个错误
您的方法addItemToCart未定义
要克服这一点,您需要将本地定义为
renderProductsList() {
var localThis= this;
}
然后将您的方法称为
onClick={() => localThis.props.addItemToCart(elem.id)}
如果您正在循环中使用函数,那么您需要执行以下操作
this.state.map(function(){
},**this**)
要保留这个请尝试将这个存储到那个(that=this),并在映射函数(that.props…map())中使用它。renderProductsList
是一个功能组件?不,它是一个函数。我会在问题中添加一个指向完整代码的链接抱歉,但它没有帮助。顺便说一句,我使用的是“babel插件转换类属性”插件,这让我自动绑定。但不管怎样,我像你说的那样把这个改成了那个,但仍然是一个错误。这是一个错误的屏幕截图。@TarasYaremkiv好的。你在哪一行得到错误?还是在同一个地方吗?这个错误意味着这个
没有道具
属性,所以它应该是相关的。我要开始了g PropType出现错误。“171:18错误'addItemToCart'PropType已定义,但从未使用过prop反应/没有未使用的prop类型”。抱歉,这不是同一个错误控制台在mapProductCards
函数的开始处,在返回之前,将此
对象记录在中,并在此处发布输出。它在控制台中打印未定义的我。实际上,如果您还没有看到-这里有一个指向整个容器代码的链接抱歉,但它没有帮助。顺便说一句,我正在使用“babel plugin transform class properties”插件,为我自动绑定。这是一个错误的屏幕截图。无法打开您的图像。在office中受限制。您能告诉我错误吗?您能检查一下console.log(这)在您的函数renderProductsList中是否给出undefined?错误实际上是相同的。PropType已定义,但从未使用过prop。react/没有未使用的prop类型。addItemToCart(elem.id)应该可以正常工作。为什么在调用函数时使用prop?