Как реализовать простую анимацию реагирования js с позой реагирования без узла js?
Я новичок в реакции JS. Недавно я просмотрел документацию по реагированию на js и документацию о реагировании. Я реализовал следующий фрагмент. Но когда я запускаю его, это не влияет на браузер. Где я не прав?
<html>
<head>
<style>
.box{
background:red;
}
</style>
</head>
<body>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js">
</script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js">
</script>
<script src="https://unpkg.com/react-pose/dist/react-pose.js"></script>
<div style="width:200px; height:200px; background:#eaeaea;" id="root"></div>
<script>
const Box = posed.div({
hidden: { opacity: 0 },
visible: { opacity: 1 }
});
class Example extends React.Component {
state = { isVisible: true };
componentDidMount() {
setInterval(() => {
this.setState({ isVisible: !this.state.isVisible });
}, 1000);
}
render() {
const { isVisible } = this.state;
return <Box className="box" pose={isVisible ? 'visible' : 'hidden'}
/>;
}
}
ReactDOM.render(<Example/>, document.getElementById('root'));
</script>
</body>
</html>
2 ответа
Если вы используете babel-standalone
для экспериментов, вы должны убедиться, что вы установили type
атрибут вашего сценария text/babel
,
.box {
width: 200px;
height: 200px;
background: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/react-pose@3.1.0/dist/react-pose.js"></script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js">
</script>
<div id="root"></div>
<script type="text/babel">
const Box = posed.div({
hidden: { opacity: 0 },
visible: { opacity: 1 }
});
class Example extends React.Component {
state = { isVisible: true };
componentDidMount() {
setInterval(() => {
this.setState({ isVisible: !this.state.isVisible });
}, 1000);
}
render() {
const { isVisible } = this.state;
return <Box className="box" pose={isVisible ? "visible" : "hidden"} />;
}
}
ReactDOM.render(<Example />, document.getElementById("root"));
</script>
Возможно это:
<Box className="box" style={{visible: this.state.isVisible, hidden: !this.state.isVisible}} />;
В любом случае, вам нужно использовать this.state.isVisible, а не просто isVisible..