我有一个问题,一个大问题,为什么我的gif不能正确渲染? 很简单,当我的鼠标放在上面时,它们应该移动,而当它关闭时它们应该保持静止。 进行交互的任务是创建一个搜索栏,该搜索栏将与Giphy的API交互,并呈现出当用户将鼠标拖到顶部时会移动的静态gif。 设置了代码,发送和接收了Ajax请求,一切似乎都按计划进行了。 我输入了第一个出现在“星球大战”标题中的词组,就像它起作用了一样。 一张又一张地出现了十张美丽的静止图像。 达斯·维达(Darth Vader),汉(Han),耐嚼(Chewy),他们都在那里。 最好的是,当我的鼠标命令它们时它们就移动了。
但是,就像阿纳金(Anakin)一样,情况并非如此。 我决定要求阿贾克斯领主下的第二件事是我最喜欢的节目《暮光之城》。 这本来是一个信号,表明并非所有人都会按计划进行。 按下Enter键后,我感到非常沮丧。 没有改变。 图像是相同的。 但是,当我拖动鼠标时,发生了一些神秘的事情,不仅《星球大战》的影像发生了变化,而且还演变成了Rod Serling。 也许我已经进入了暮光区?
为什么会这样,我正在做所有事情。 Ajax的请求显然是有效的。 我已经更改了App组件中的状态,然后将该状态通过props向下传递给了gif组件,但仍然存在某些问题。 在检查了我的代码几个小时之后,谷歌搜索了一下,我学到了宝贵的一课。 如果状态不变,并且道具在初始化期间导致状态改变,那么React不会渲染其道具已经改变的各个组件。
然后在我的渲染功能期间调用了此状态。
即使您不断听到状态每次改变都会渲染React的知识,这也为您提供了宝贵的一课,但您永远无法假设正在重新创建每个单独的组件。 那就是单个组件不会命中其构造函数,因为它们只命中一次。 重要的是要考虑一下渲染的实际含义。 这并不意味着将创建新的组件实例。 这仅表示React将呈现状态已更改的任何组件。 但是,如果我们查看此示例,我们可以看到gif的状态没有改变,只有道具。
那么,我们如何快速解决这个问题呢?
这是一个内置的React函数,只要将新的prop分配给组件,就会触发该函数,除非在组件初始化时不会调用它。 它是组件规格生命周期的一部分。 这将更新在render函数中引用的各个gif的状态。 因此,我们将