我有一个react组件,我在其中动态添加一些元素:
addElement( reactComponent, imgurl, e, layer ) {
const elementWrapper = document.createElement( 'span' );
const { dispatch } = this.props;
const element = document.createElement( 'img' );
const [ x, y ] = this.getMousePositionInsideTheElement( banner, e );
elementWrapper.style.position = 'absolute';
elementWrapper.id = layer.name;
element.src = imgurl;
element.onload = function () {
element.classList.add( layer.name.split('.')[0] );
element.style.height = '50px';
element.style.width = '50px';
elementWrapper.style.top = `${y - 50 / 2 }px`;
elementWrapper.style.left = `${x - 50 / 2}px`;
element.onclick = () => dispatch( setSelectedLayer( layer ) );
elementWrapper.appendChild( element );
reactComponent.appendChild( elementWrapper )
}
}
根据用户输入,我动态创建style
元素并将其附加到head
updateScene( stylesheet )
{
let style = document.createElement( 'style' );
style.type = 'text/css';
style.innerHTML = getCSS( stylesheet );
document.getElementsByTagName( 'head' )[ 0 ].appendChild( style );
}
元素的css属性已正确更新,元素也会更新,例如如果用户更改高度和宽度,我会生成一个新的css并将其附加到头部,正确应用css规则并更新“场景”中的元素。但animations
并没有发生这种情况,尽管它们似乎是正确的(它们适用于Codepen)。
我生成的CSS就像:
img.CZ6kGtDWwAAcrG4 {
height: 200px;
widht: 200px;
}
.CZ6kGtDWwAAcrG4 {
width: 100px !important;
height: 100px !important;
border-top-width: 10px;
animation-name: cz6kgtdwwaacrg4-octopus-animation;
animation-iteration-count: 15;
animation-duration: 5s;
}
@keyframes cz6kgtdwwaacrg4-octopus-animation {
9% {
border-top-style: solid;
}
42% {
border-top-style: solid;
}
70% {
border-top-width: 30px;
border-top-color: red;
border-top-style: solid;
}
}
知道我做错了什么?
答案 0 :(得分:0)
我设法使用React.createElement而不是document.createElement来解决问题
const reactElementOptions = {
style: {
height: '50px',
width: '50px'
},
className: layer.name.split('.')[0],
src: imgurl
};
const reactElement = React.createElement( 'img', reactElementOptions );
const reactElementWrapperOptions = {
id: layer.name,
style: {
position: 'absolute',
top: y,
left: x
},
onClick: () => dispatch( setSelectedLayer( layer ) )
};
const reactElementWrapper = React.createElement( 'span', reactElementWrapperOptions, reactElement );
this.state.elements.push( reactElementWrapper );
this.setState( {
elements: this.state.elements
} );
然后map
加入组件而不是append
{
this.state.elements.map( ( el ) => el )
}