我正在处理一个用jquery编写的项目,我想把这段代码集成到我的react项目中,我试图通过点击一个按钮向我的graphql服务器发送一个查询。
有一个JQ函数可以创建多个元素,如下所示:
canvas.append($(`<div class="d-flex flex-wrap my-2"><img class="else_picture" src="${elem.artworkUrl600}" height="150px"><div class="mx-2"><div class="elseTitle" id="${elem.trackId}">${elem.trackName}</div><h6>by:${elem.artistName}</h6><h6>keywords:</h6><p>${elem.genres}</p><div class="d-flex justify-content-start"><button value="${elem.feedUrl}" class="get_description"><a target="_blank" href="${elem.trackViewUrl}">Info link</a></i></button><div class="like_box"><i id="like" class="fa fa-thumbs-up"></div></div></div><hr>`)
);
我的目标是将一个函数“onClick()”连接到这些创建的元素中的所有按钮,为此我尝试定义一个函数,它可以通过id查询所有元素,并将其连接到一个函数,该函数带有一个到我的graphql服务器的钩子:
function connectFunctionalityToLike(){
$("#like").on("click", function(){ Like(this); });
}
function Like(x){
console.log("clicked");
const { loading, error, data } = useQuery(ME_QUERY);
if (loading) return 'Loading...';
if (error) return `Error! ${error.message}`;
console.log(data);
}
我的函数Like()实际上不起作用,因为我不理解react中的元素实际上是如何与jquery一起工作的。我不能在JQuery中重写代码。我只想集成现有的代码。有没有办法将react钩子连接到通过id创建的元素?
有没有
2条答案
按热度按时间9jyewag01#
您应该为JQuery函数创建一个React组件 Package 器。
您必须手动管理React生命周期-通过在
useEffect()
回调中调用JQuery函数,并注意在清理中删除DOM元素:然后,在这个React组件中,将允许使用钩子。
另外,如果JQuery函数非常简单,那么用React重写它可能会更好。
xoshrz7s2#
正如安迪在评论中所说:“You shouldn 't be mixing jQuery and React.”--但是,我们都曾处于别无选择的境地。如果您别无选择,只能使用jQuery沿着React,下面示例中的代码可能会有所帮助。
示例略有不同(没有画布等),但您应该能够看到您需要的内容。
这个示例超出了您的问题,并预测了下一个问题-“我如何访问和使用jQuery添加的[card、div、section等]中的数据?”
这是一个工作正常的StackBlitz EDIT -固定链接
请参见代码中的注解: