родительский компонент имеет тег p, который анимирует его внутренний текст. анимация работает, когда я обновляю страницу.
вот родительский компонент:
import React, { Component } from 'react';
import Child from './Child';
class Parent extends Component {
rerender=()=>{
this.forceUpdate()
}
render() {
return (
<div>
<p className='animate-left'>Animation</p>
<Child rerender = {this.rerender}/>
</div>
);
}
}
export default Parent;
вот дочерний компонент:
import React, { Component } from 'react';
class Child extends Component {
clickHandler=()=>{
this.props.rerender()
}
render() {
return (
<div>
<button onClick = {this.clickHandler}>Click</button>
</div>
);
}
}
export default Child;
я хочу снова анимировать/перерисовать родительский компонент, нажав кнопку дочернего компонента. Как это сделать?
@ Yung-DaLinLynda, я использую CSS-фреймворк под названием «W3.CSS». я удаляю «w3-» из имени класса. В css нет проблем. когда я обновляю страницу, анимация работает хорошо. но когда я нажимаю кнопку, она не работает. w3schools.com/w3css/…
Вы должны иметь state
в родительском компоненте и передать это состояние дочернему компоненту:
import React, { Component } from "react";
import Child from "./Child";
class Parent extends Component {
constructor(props) {
super(props);
this.state = {
counter: 0
};
}
rerender = () => {
this.forceUpdate();
};
forceUpdate = () => {
this.setState((state) => ({
counter: state.counter + 1
}));
};
render() {
console.info("got rendered");
return (
<div>
<p className = "animate-left" key = {this.state.counter}>Animation</p>
<Child rerender = {this.rerender} />
</div>
);
}
}
export default Parent;
и в дочернем компоненте обновить это состояние:
import React, { Component } from "react";
class Child extends Component {
clickHandler = () => {
this.props.rerender();
};
render() {
return (
<div>
<button onClick = {this.clickHandler}>Click</button>
</div>
);
}
}
export default Child;
это не работает. но когда я нажимаю кнопку, печать console.info отображается, но анимация не работает
Каково содержание класса animate-left
?
.animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
чтобы заставить анимацию добавить key = {this.state.counter}
к тегу p
, я отредактирую свой ответ.
Можете ли вы предоставить
animate-left
подробно?