reactjsを使ってdivをアニメーション化しようとしましたが、非同期データをredux経由で使用しようとしましたが、いつ仮想DOMを参照できますか。非同期データでreactjを使ってdivを操作しようとしています
私の場合、IDがheader
のdivがあります。ここには、データが移入されたときにコンテナをプッシュダウンしたいと考えています。
私はCannot read property 'style' of undefined
を取得するよりも、componentDidMountはまだ私は状態で、この場合に対処するにはどうすればよい負荷時のコンテナの
class HomePage extends React.Component {
constructor(props) {
super(props);
this.state = {
sliderLength: null
}
}
componentDidMount() {
this.props.actions.getSlides()
if(this.header) {
setTimeout(function() {
this.header.style.bottom = -(this.header.clientHeight - 40) + 'px';
}, 2000);
}
//header.style.bottom = -pushBottom+'px';
}
componentWillReceiveProps(nextProps) {
let {loaded} = nextProps
if(loaded === true) {
this.animateHeader()
}
}
animateHeader() {
}
componentWillMount() {
const {slides} = this.props;
this.setState({
sliderLength: slides.length,
slides: slides
});
}
render() {
const {slides, post, loaded} = this.props;
if(loaded ===true) {
let sliderTeaser = _.map(slides, function (slide) {
if(slide.status === 'publish') {
return <Link key={slide.id} to={'portfolio/' + slide.slug}><img key={slide.id} className="Img__Teaser" src={slide.featured_image_url.full} /></Link>
}
});
let about = _.map(post, function (data) {
return data.content.rendered;
})
return (
<div className="homePage">
<Slider columns={1} autoplay={true} post={post} slides={slides} />
<div id="header" ref={ (header) => this.header = header}>
<div className="title">Title</div>
<div className="text-content">
<div dangerouslySetInnerHTML={createMarkup(about)}/>
</div>
<div className="sliderTeaser">
{sliderTeaser}
</div>
<div className="columns">
<div className="column"></div>
<div className="column"></div>
<div className="column"></div>
</div>
</div>
<div id="bgHover"></div>
</div>
);
} else {
return <div>...Loading</div>
}
}
}
function mapStateToProps(state) {
return {
slides: state.slides,
post: state.post,
loaded: state.loaded
};
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(slidesActions, dispatch)
};
}
function createMarkup(markup) {
return {__html: markup};
}
export default connect(mapStateToProps, mapDispatchToProps)(HomePage);
への参照を持つので、私はcomponentDidMountにしようとすると?
私はあなたがあなただけのJavaScriptの昔ながらを使用this.header
でアクセスしようとしている理由のdivをアニメーション化しようとしている場合
componentDidUpdate() {
if(this.header) {
setTimeout(function() {
this.header.style.bottom = -(this.header.clientHeight - 35) + 'px';
}, 2000);
}
}
フィードバックありがとう!私はすでにこれに依存したいと思うredux( 'loaded')アクションによって提供される状態変数を持っています。新しい状態変数は、非同期データがロードされているかどうかをどのように知るでしょうか? – fefe
'loaded'変数があれば' render'メソッドでそれにアクセスできます。ちょうど 'const isHeaderOpen = this.state.loaded'を実行し、コードは同じです。 – Gpx
あなたがReactについて学んでいるなら、最初はReduxを使わないことをお勧めします。コンポーネントの内部状態を使用するだけです。物事の仕組みを理解したら、Reduxや他の州のマネージャーを追加してください。すべての概念を理解するのがはるかに簡単です。 – Gpx