javascript - 如何在基于时间的间隔内将 React 元素添加到组件而不导致重新渲染?
问题描述
我不确定 React JS 是否可以做到这一点,但有办法吗?
setInterval(() => {
ReactDOM.render(
<h1 id = {count}>{count}</h1>,
document.getElementById("drop")
);
count = count + 1;
}, 1000);
这是我到目前为止的代码,但它不起作用,因为它只是替换了 . 目标是每两秒钟,React 将从字符串数组中选择一个单词,并使其从页面顶部落到底部 [使用 React-Spring]。因此,创建一个新的 React 元素并每两秒将其添加到 React 组件中。
解决方案
这是代码,然后是我对您应该如何思考做出反应的解释。
const MyComponent = () => {
const words = [
"this",
"is",
"an",
"example",
"of",
"an",
"array",
"of",
"strings",
];
const [activeWordIndex, setActiveWordIndex] = useState(0);
const timeout = 2000;
useEffect(() => {
setTimeout(() => {
setActiveWordIndex(activeWordIndex + 1);
}, timeout);
}, [activeWordIndex]);
const activeWord = words[activeWordIndex];
// TODO with your react-spring
return <h5>{activeWord}</h5>;
};
一些注意事项:
- 我没有处理案例索引超出数组长度的情况,您可以自己处理。我只是想给出这个概念
- 您可以复制并粘贴上面的代码并运行以查看
activeWord
显示。
这是您在 reactJs 中应该思考的方式:
- 没有创建一个新元素,你应该像我的数组一样从一开始就有一个
words
数组。在实际应用中,这个数组通常是从 API 中获取的。 - 您应该必须在
activeWordIndex
上面的“反应状态”中保留一个“活动”项目,并setActiveWordIndex
在需要时使用它来设置它的值。
推荐阅读
- r - 类别列和观察名称的可打印表格
- javascript - 如何在 jquery 中获取 json 键和值?
- r - 将两组之间的匹配数制表(包括零匹配)
- ios - Appium Inspector 未识别 IOS Mobile 应用程序上的某些元素
- java - 设置形状颜色的不透明度
- sql-server - 如何在 SQL 中将单行值作为逗号附加文本获取
- angular - IIS上的angular6应用程序部署
- pandas - Pandas:创建包含总行列的新数据框
- java - 当尝试在Java中添加一个数字的数字时,5 + 0 = 53?
- python - 在 python scipy 1.1 版中计算信噪比