我想在点击期间从博客文章中获得相应框的tags
。但是,当控制台记录打印标记时,它在randomizedHex()
中显示为“”。标签隐藏在前端。有人可以帮忙吗?
演示: https://codesandbox.io/s/prod-glade-lsf46?file=/src/App.js
export default function App() {
const [blogArticles, setBlogArticles] = useState([]);
const [showColor, setShowColor] = useState("");
const [findTag, setFindTag] = useState("");
useEffect(() => {
setBlogArticles(items);
}, []);
const randomizedHex = (blogArticles) => {
setFindTag(blogArticles.tags);
console.log("Print tag:", findTag);
const randomColor = "#" + Math.floor(Math.random() * 16777215).toString(16);
setShowColor(randomColor);
};
return (
<div className="App">
<div className="row">
{blogArticles.map(
({
sys: { id, createdAt },
fields: { title, images, description, shortDescription, tags }
}) => (
<div key={id} className="column">
<article
onClick={() => {
randomizedHex(blogArticles);
}}
key={id}
className="blogmaintile"
>
<img
className="blogImage"
key={images}
src={images}
alt="myimg"
></img>
<div className="blogtitle">
<span key={title}>{title}</span>
</div>
<section>
<p className="blogdescription" key={shortDescription}>
{shortDescription}
</p>
</section>
<section>
<p className="blogdescription" key={description}>
{description}
</p>
</section>
<section>
<p style={{ display: "none" }} className="tag" key={tags}>
{tags}
</p>
</section>
<section className="col2">
<a href="https://google.com">
Read more {">"}
{">"}
</a>
</section>
</article>
</div>
)
)}
</div>
</div>
);
}
答案 0 :(得分:1)
您需要将经过tags
重构的blogArticle.fields
传递给randomizedHex
。
{blogArticles.map(
({
sys: { id, createdAt },
fields: { title, images, description, shortDescription, tags } // <-- tags
}) => (
<div key={id} className="column">
<article
onClick={() => {
randomizedHex(tags); // <-- pass tags
}}
key={id}
className="blogmaintile"
>
...
</article>
</div>
)
)}
将randomizedHex
转换为使用传递的标签,而不是整个 blogArticles
数组。
const randomizedHex = (tags) => {
setFindTag(tags);
console.log("Print tag:", tags);
const randomColor = "#" + Math.floor(Math.random() * 16777215).toString(16);
setShowColor(randomColor);
};