【发布时间】:2021-06-24 14:48:53
【问题描述】:
这是我遇到问题的地方,
const handleCLick = () => {
const parsedId = getYouTubeID(videoLink);
console.log(parsedId);
setVideoId(parsedId);
console.log(videoId);
}
在这里,当我尝试记录“parsedId”时,它会正确记录数据
ioNng23DkIM
使用 setVideoId() 函数后,当我尝试记录它返回 undefined 的值时
undefined
这是日志输出的快照。
Home.js 代码:
import React, { useRef, useState } from "react";
import { Link } from "react-router-dom";
import getYouTubeID from 'get-youtube-id';
function Home(props) {
const [videoLink, setVideoLink] = useState();
const [isBool, setBool] = useState(false);
const [videoId, setVideoId] = useState();
const urlRef = useRef();
const handleChange = (event) => {
setVideoLink(event.target.value);
if (urlRef.current.value === '') {
alert('Please enter a URL');
setBool(true);
} else {
setBool(false);
}
}
const handleCLick = () => {
const parsedId = getYouTubeID(videoLink);
console.log(parsedId);
setVideoId(parsedId);
console.log(videoId);
}
return (
<section className="homeLayout">
<div className="logo-display">
<img className="logo-img" alt="logo" src="./logo.png" />
<h1>WatchIt</h1>
</div>
<div className="searchlayer">
<form>
<input ref={urlRef} id="videoLink" placeholder="Enter the youtube video URL:" onBlur={handleChange} required />
<Link style={{ pointerEvents: isBool ? 'none' : 'initial' }} to={`/play?=${videoId}`} onClick={handleCLick}>Play</Link>
</form>
</div>
</section>
);
}
export default Home;
【问题讨论】:
-
setVideoId是异步的,所以videoId不会立即设置 -
那么我应该怎么做才能解决我的问题呢? @尼克帕森斯
-
当
videoId最终被设置时,您的函数将使用设置的值重新渲染。所以应该没有问题,你的问题到底是什么/什么不起作用?
标签: reactjs react-hooks use-state