Shn*_*ble 7 javascript reactjs gatsby react-transition-group
react-transition-group
在我正在从事的gatsby项目中使用软件包时,我注意到了这种现象。我有一个“标签”列表,这些标签是从另一个主列表中选取的,它们被添加到活动列表中。单击主列表中的标签将其添加到活动列表中,然后单击活动列表中的标签将其删除。您几乎希望这样的事情会起作用。
过渡的作品不错,但转换时出的标签在一个陌生的方式重新组织起来。我们有五个具有以下值的标签:
如果单击该Family Sized
标签将其删除,则会发生以下情况:
Family Sized
瞬间消失Low Cholesterol
并Low Sodium
立即向左移动Low Sodium
立即变为Low Sodium
过渡值预期的行为是,Family Sized
标记从组中间的位置过渡出来。我应该注意,如果您从活动列表中删除最后一个标签,则效果很好,只有在从其他位置删除标签时,才会发生这种情况。
这是过渡的慢速GIF,这是我的代码:
<TransitionGroup className='tag-container'>
{filter.map((tag, index) => {
return (
<CSSTransition key={index} timeout={250} classNames={`tag`}>
<TagButton value={tag} onClick={onClickFunction} className={`${screenStyle} active`}>{tag}</TagButton>
</CSSTransition>
)
})}
</TransitionGroup>
Run Code Online (Sandbox Code Playgroud)
filter
是从组件状态变形的数组。<StaticQuery>
从gatsby
在相同的使用render()
如果该事务的部件的方法。<TagButton>
是从一个风格的部件styled-components
包,而不是一个单独进口组合。在数组方法中添加特定的标识符并将每个元素的键设置为map方法中的每个标识符将解决您的问题。
import React from "react";
import ReactDOM from "react-dom";
import { Button } from "react-bootstrap";
import { CSSTransition, TransitionGroup } from "react-transition-group";
import "bootstrap/dist/css/bootstrap.css";
import "./styles.css";
import uuid from "uuid";
function App() {
const [items, setitems] = React.useState([
{ id: uuid(), name: "Dairy Free" },
{ id: uuid(), name: "Party Food" },
{ id: uuid(), name: "Family Sized" },
{ id: uuid(), name: "Low Cholesterol" },
{ id: uuid(), name: "Low Sodium" }
]);
const removeitem = item => {
setitems(items.filter(itemname => itemname.id !== item));
};
return (
<div className="App">
<TransitionGroup className="todo-list">
{items.map(data => (
<CSSTransition timeout={500} classNames="item" key={data.id}>
<Button className="m-2" onClick={() => removeitem(data.id)}>
{data.name}
</Button>
</CSSTransition>
))}
</TransitionGroup>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Run Code Online (Sandbox Code Playgroud)
这个问题已经在这里解决,因此请结帐以了解这种奇怪的行为。
归档时间: |
|
查看次数: |
197 次 |
最近记录: |