Reactjs 反应:动态位置不';不要在第一次渲染时工作
我正在尝试制作一个容器组件,它可以用鼠标拖动,并且可以拖动所有的子组件。我有它大部分工作,但不是最初的位置。我传入组件和x,y,这将设置状态变量。在渲染中,我将这些变量作为样式传递给div。初始位置根据css(如果未在css中设置,则为0)。然后,当我第一次拖动它时,它会跳到传入的坐标。我在渲染中有一个log语句,每个渲染都得到正确的状态变量 我尝试在componentDidMount中对状态进行虚拟更新,以查看是否可以欺骗它,使其在拖动时的行为与拖动时相同,但不进行任何更改Reactjs 反应:动态位置不';不要在第一次渲染时工作,reactjs,Reactjs,我正在尝试制作一个容器组件,它可以用鼠标拖动,并且可以拖动所有的子组件。我有它大部分工作,但不是最初的位置。我传入组件和x,y,这将设置状态变量。在渲染中,我将这些变量作为样式传递给div。初始位置根据css(如果未在css中设置,则为0)。然后,当我第一次拖动它时,它会跳到传入的坐标。我在渲染中有一个log语句,每个渲染都得到正确的状态变量 我尝试在componentDidMount中对状态进行虚拟更新,以查看是否可以欺骗它,使其在拖动时的行为与拖动时相同,但不进行任何更改 .draggabl
.draggable {
cursor: pointer;
width: 200px;
height: 200px;
background-color: #cca;
position: absolute;
z-index: 2;
}
export default class Draggable extends React.Component{
constructor(props){
super();
this.state = {
preDragPos: {x:props.initialX, y:props.initialY},
pos: {x:props.initialX, y:props.initialY},
dragging: false,
rel: null // Initial Mouse Down location
}
....
Use mouse up/down/move to modify this.state.pos
....
render () {
const dragStyle = {
left: this.state.pos.x,
top: this.state.pos.y,
};
console.log("Render", dragStyle);
return (
<div className="draggable" style={dragStyle} onMouseDown={this.onMouseDown} onMouseUp={this.onMouseUp}>
{this.props.children}
</div>
);
}
.draggable{
光标:指针;
宽度:200px;
高度:200px;
背景色:#cca;
位置:绝对位置;
z指数:2;
}
导出默认类可拖动的扩展React.Component{
建造师(道具){
超级();
此.state={
preDragPos:{x:props.initialX,y:props.initialY},
pos:{x:props.initialX,y:props.initialY},
拖动:false,
rel:null//初始鼠标下移位置
}
....
使用鼠标上/下/移动修改此.state.pos
....
渲染(){
常量dragStyle={
左:这个州,位置x,
上图:这个州,位置y,
};
console.log(“渲染”,dragStyle);
返回(
{this.props.children}
);
}
感谢用户hermitcrab。创建组件时,我将参数传递为“100”而不是{100}。两者的console.log看起来相同,但效果不同。感谢用户hermitcrab。创建组件时,我将参数传递为“100”而不是{100}。两者的console.log看起来完全相同,但效果却不同。这很奇怪,您的代码在我的计算机上运行得非常好。您是否尝试过检查div的第一次渲染以确保其属性正确?可能是您的设备的另一部分产生了css副作用您确定您正确地传递了x和y吗r分量?应该是这样的:谢谢HermitCrab,正是它,我有“100”而不是{100}当然,它在日志语句中打印得很好。从C++ YOJavaScript转换到缺少类型转换,这会使我感到非常的糟糕。我知道你的意思,我也在从C++中转换。你能编辑你的帖子并把它标记为固定吗?因为我最终把一个栈过流帐户作为一个借口,只是潜伏着我还没有足够的名声。在你的答案旁边没有复选标记供我点击。这似乎是堆栈溢出的一个非常奇怪的选择。这很奇怪,你的代码在我的计算机上运行得非常好。你是否尝试过检查你的div的第一次渲染以确保其属性正确?也许你的外观的另一部分有css副作用你确定你通过了吗将x和y正确地映射到组件中?应该是这样的:谢谢HermitCrab,就是这样,我有“100”而不是{100}当然,它在日志语句中打印得很好。从C++ YOJavaScript转换到缺少类型转换,这会使我感到非常的糟糕。我知道你的意思,我也在从C++中转换。你能编辑你的帖子并把它标记为固定吗?因为我最终把一个栈过流帐户作为一个借口,只是潜伏着我还没有足够的名声。您的答案旁边没有复选标记供我点击。这似乎是堆栈溢出的一个非常奇怪的选择。