我正在尝试制作一个可以获取其子项在渲染上的位置的函数,以便它可以重新渲染它们而不会重叠(它们是绝对定位的)。
const ContentWrapper: React.FC<{article: Article.article.article}> = ({ article }) => {
const [footnotePositions, setFootnotePositions] = useState<Number[]>([]);
const updatePositions = (footnotePosition) => {
setFootnotePositions([...footnotePositions, footnotePosition]);
}
useEffect(() => {
// re position children... idk where to put this haven't gotten this far
}, [footnotePositions])
return (
<>
{article.map( (x, i) => (
<span key={i}>
{ x[1]==='' ?
<Line>{x[0]}<br/>  </Line>
:
<>
<Line>{x[0]}</Line>
<FootnoteRef footnotePosition={updatePositions} />
<Citation footnote={x[1]}/>
</>
}
</span>
))}
</>
)
}
我可以调试并看到该updatePositions函数被正确调用,但是它没有正确设置状态(我假设是因为异步性质 setState())。状态仅设置为函数中呈现的最后一个组件的位置map()。
如何在不覆盖先前迭代的情况下从回调函数调用 setState?
我是否需要绑定回调函数(这在功能组件中是如何工作的)?
冉冉说
相关分类