我开始使用钩子,我遇到了一个问题。
我有一个priceToFilter
状态:
const [priceToFilter, setPriceToFilter] = useState(0)
最初设置为0
,它在初始渲染时正确渲染0
。
但问题是,我希望它的值是我使用useffect
hook在初始渲染中获取的数组的长度
但是我不知道阵列的长度,直到组件安装完毕。
所以,在这个函数中,我试图访问priceToFilter,但它返回0
,因为这是它的初始值。
function filterResutls() {
setFilteredResults(results.filter(x => {
return x.stars <= stars && x.price <= priceToFilter
}))
}
但是,如果您在使用效果
中看到,我将通过setPriceToFilter
函数将priceToFilter
设置为另一个值。但是,当use效应
发生在初始化挂载之后时,它不会获得新值,而是保持为0
。
关于如何在第一次渲染时获得priceToFilter
的更新值,有什么想法吗?
useEffect(() => {
fetchHotels(endpoint)
.then( data => {
setFilteredResults(data)
setresults(data)
const max = Math.max.apply(Math, data.map((x) => x.price ))
setMaxPrice(max)
setPriceToFilter(max)
filterResutls()
})
.catch(e => console.log('MAKE SOMETHING IN UI', e))
}, [endpoint])
您需要添加第二个useffect
来收听价格更新,然后相应地过滤结果:
useEffect(() => {
function filterResutls() {
setFilteredResults(results.filter(x => {
return x.stars <= stars && x.price <= priceToFilter
}))
}
filterResults();
}, [priceToFilter, stars])
相关功能也应从第一个挂钩中删除:
useEffect(() => {
fetchHotels(endpoint)
.then( data => {
setresults(data)
const max = Math.max.apply(Math, data.map((x) => x.price ))
setMaxPrice(max)
setPriceToFilter(max)
})
.catch(e => console.log('MAKE SOMETHING IN UI', e))
}, [endpoint])
更可靠的方法不是将过滤后的数据存储在状态上,而是在渲染期间将其导出:
return results
.filter(x => x.stars <= stars && x.price <= priceToFilter)
.map(result => <p>Price: {result.price}</p>);
我有一个非常简单的react应用程序。我试图设置一个状态变量,然后在console.log之后立即设置该变量,但得到一个空值。 我希望在第一次渲染时,它会在控制台中显示“Test”,但它会显示空字符串。这是怎么回事?
可以通过appear特性设置节点在初始渲染的过渡: <transition appear> <!-- ... --> </transition> 这里默认和进入/离开过渡一样,同样也可以自定义 CSS 类名。 <transition appear appear-class="custom-appear-class" appear-to-class="custom-appear
我在函数组件中使用useState(),第一个渲染调用两次。这是正确的还是错误的?如果正确,为什么渲染两次?setCount也会渲染组件两次。 谢啦
页面渲染设置 页面渲染功能开启后能自动加载出网页中的ajax内容 服务器中需要安装谷歌浏览器,支持linux、win系统 centos7安装chrome的命令: wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm yum localinstall google-chrome-stable_
当安装完成并首次启动 Navicat Monitor 时,浏览器会弹出并打开你的 Navicat Monitor 的网址“http://<your_ip_address>:<port_number>”。你需要在欢迎页面完成 Navicat Monitor 的基本配置。 【注意】<your_host_address> 是安装了 Navicat Monitor 的系统的主机名,以及 <port_num
我在Javascript上制作了一个程序,创建了mandelbrot分形,并在html画布上绘制了它。我的渲染方法是每行迭代,从0到500像素,然后简单地循环创建500行500像素。 我的问题是,当我渲染它的时候,(用更多的放大率刷新页面),它需要很多时间。300倍的放大率大约在30秒内工作,但5000倍需要一个多小时。请帮忙。我想有非常高的放大率和图像加载迅速。 我通过一个下载的文件运行我的程序