React 组件的状态发生变化以后,组件就会被重建,这样界面就会显示变化之后的样子。在组件里修改组件的状态要通过 setState 这个方法。
在这个 AppHeader 组件里,先定义一个方法,名字是 changeEmoji ,在它里面可以执行一下 this.setState,修改一下组件里的状态。可以给它提供一个对象参数,或者函数参数。
先试一下提供一个对象参数,要修改的是 emoji 这个 state,对应的值可以判断一下 this.state.emoji,如果组件当前 emoji 这个状态的值是一棵树🌴,就把 emoji 这个状态的值改成一座帐篷🏕,不然就让它的值是一棵树🌴。
然后在构造方法里面,可以每隔一段时间就执行一下这个 changeEmoji 方法。用一下浏览器提供的 window.setInterval 这个方法,它可以设置每隔一段时间执行一些动作。先给它提供一个回调,要执行的是 this.changeEmoji(),间隔的时长设置成 3000 毫秒,也就是 3 秒钟。
在浏览器预览一下,现在页面上显示的表情符号每隔 3 秒钟就会变化一次。这里我们可以再观察一下页面元素, 你会发现每次有变化的地方只是这个表情符号,其它的元素不会受到影响。因为 React DOM 会对比 React 元素还有页面当前的显示,只会更新需要的地方。
这个 setState 方法的参数还可以是一个函数,如果给它提供的是函数,第一个参数是组件当前的 state,第二个参数是组件的 props,如果在函数里不需要使用 props,参数名可以设置成一个下划线。
函数返回的值是组件的新的状态,同样可以修改一下 emoji 这个 state,这里我们可以直接使用 state 这个参数,不需要再加这个 this 了。
再到浏览器上预览一下,效果跟之前是一样的,每隔一段时间,表情符号就会发生变化。