有可能让React移动一个元素而不是在它改变它在DOM中的位置时重新创建它吗?
让我们假设我正在创建一个2窗格组件,我希望能够隐藏/取消隐藏一个窗格.我们也可以想象窗格本身很重.在我的例子中,每个窗格都有超过2000个元素.
在我的实际代码中,当有2个窗格时,我正在使用分割器.为了只显示一个窗格,我需要删除拆分器并用div替换它.
下面的代码模拟了这一点.如果有一个窗格,则使用a div来包含窗格.如果有2个窗格pre用于包含它们.在我的情况下,它将是div1痛苦和splitter2.
因此,document.createElement我发现不仅创建了容器,而且还重新创建了内部元素.换句话说,在我的代码中,当从splitter-> div开始时,2000+元素窗格将完全重新创建,这很慢.
有没有办法有效地告诉React."嘿,不要重新创建这个组件,只是移动它?"
class TwoPanes extends React.Component {
constructor(props) {
super(props);
}
render() {
const panes = this.renderPanes();
if (panes.length === 2) {
return React.createElement('pre', {className: "panes"}, panes);
} else {
return React.createElement('div', {className: "panes"}, panes);
}
}
renderPanes() {
return this.props.panes.map(pane => {
return React.createElement('div', {className: "pane"}, pane);
});
}
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
panes: [
"pane …Run Code Online (Sandbox Code Playgroud)我一直看到这个错误代码
page.on('console', msg => console.log(msg.text()));
Run Code Online (Sandbox Code Playgroud)
这失败
console.log('Hello %s', 'World');
Run Code Online (Sandbox Code Playgroud)
产生
Hello World // browser
Hello %s World // puppeteer
Run Code Online (Sandbox Code Playgroud)
好,所以我想也许我可以做到
page.on('console', msg => console.log(...msg.args()));
Run Code Online (Sandbox Code Playgroud)
NOPE:那倒掉了一些巨大的JSHandle东西。
好吧,也许
page.on('console', msg => console.log(...msg.args().map(a => a.toString());
Run Code Online (Sandbox Code Playgroud)
NOPE:打印
JSHandle: Hello %s JSHandle: World
Run Code Online (Sandbox Code Playgroud)
我想我可以通过删除前9个字符来破解它。
我也试过
page.on('console', msg => console.log(...msg.args().map(a => a.jsonValue())));
Run Code Online (Sandbox Code Playgroud)
NOPE:打印
Promise { <pending> } Promise { <pending> }
Run Code Online (Sandbox Code Playgroud)
好吧
page.on('console', async(msg) => {
const args = Promise.all(msg.args().map(a => a.jsonValue()));
console.log(...args);
});
Run Code Online (Sandbox Code Playgroud)
不,那是打印
UnhandledPromiseRejectionWarning: TypeError: Found non-callable @@iterator
UnhandledPromiseRejectionWarning: Unhandled …Run Code Online (Sandbox Code Playgroud) 在许多视频游戏中,我看到一种模式,当你将鼠标悬停在一个物体上时,它会在物体的2D形状周围显示一个漂亮的渐变高光.我建立了一个相当基本的Three.js场景,里面有一个球体
首先,我设置了raycaster变量:
var projector = new THREE.Projector();
var mouse2D = new THREE.Vector2(0, 0);
var mouse3D = new THREE.Vector3(0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
然后我做了一个raycaster功能
document.body.onmousemove = function highlightObject(event) {
mouse3D.x = mouse2D.x = mouse2D.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse3D.y = mouse2D.y = mouse2D.y = -(event.clientY / window.innerHeight) * 2 + 1;
mouse3D.z = 0.5;
projector.unprojectVector(mouse3D, camera);
var raycaster = new THREE.Raycaster(camera.position, mouse3D.sub(camera.position).normalize());
var intersects = raycaster.intersectObject(mesh);
if (intersects.length > 0) {
var obj = intersects[0].object; //the object that was …Run Code Online (Sandbox Code Playgroud) 无论我做什么,我的纹理似乎都会被拉伸/缩放到我应用它们的网格的大小。我已经阅读了这个问题的很多答案,似乎没有一个解决方案可以为我解决问题,所以我发布了一个新的解决方案。只是一点信息,
这是我的代码
makeTestObject:function()
{
var scope = this,
tileGeometry = new THREE.BoxGeometry(TILE_SIZE , TILE_HEIGHT , TILE_SIZE),
texture = new THREE.Texture(preloadedImageObject),
textureMaterial = new THREE.MeshLambertMaterial({map:texture}),
tile = new THREE.Mesh(tileGeometry , new THREE.MeshFaceMaterial(
[
textureMaterial, // +x
textureMaterial, // -x
textureMaterial, // +y
textureMaterial, // -y
textureMaterial, // +z
textureMaterial // -z
]));
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
tile.position.y = BASE_HEIGHT * 2;
tile.castShadow = true;
tile.receiveShadow = true;
texture.needsUpdate = true;
scope.scene.add(tile); …Run Code Online (Sandbox Code Playgroud) 我目前正在编写我的第一个Three.js/WebGL应用程序,它在我的PC(Chrome)上运行得非常好.遗憾的是,在许多其他PC上,帧速率通常会低于每秒30帧.
由于应用程序实际上并不复杂,我想询问一些与应用程序相关的提示,以提高性能.该应用程序的一个版本可以在这里找到:
www.wrodewald.de/StackOverflowExample/
该应用程序包含一个使用64²顶点的动态(变形)平面.矩阵用于存储静态高度图和波形图.每个帧都会更新波形图以重新计算自身,一些过滤器用于与每个顶点相比"均匀".因此,必须更新平面的每个帧(颜色和顶点位置),这可能是性能问题的原因
第二个对象(菱形)不应该是一个问题,静止,移动一点但没有什么特别的.
有三个灯(环境,方向,球形),没有阴影,倾斜移位着色器和晕影着色器.
以下是每帧调用的函数:
var render = function() {
requestAnimationFrame( render );
var time = clock.getDelta();
world.updateWorld(time);
diamond.rotate(time);
diamond.update(time);
control.updateCamera(camera, time);
composer.render();
stats.update();
}
Run Code Online (Sandbox Code Playgroud)
这是什么world.updateWorld(time)呢
//in world.updateWorld(time) where
// accmap: stores acceleration and wavemap stores position
// this.mapSize stores the size of the plane in vertices (64)
// UPDATE ACCELERATION MAP
for(var iX = 1; iX < (this.mapSize-1); iX++) {
for(var iY = 1; iY < (this.mapSize-1); iY++) {
accmap[iX][iY] -= dT * (wavemap[iX][iY]) * …Run Code Online (Sandbox Code Playgroud) 来自 node.js 我可以这样做来告诉 node.js 使用 ipv6 和 ipv4 发出请求
var http = require("http");
var options = {
hostname: "google.com",
family: 4, // set to 6 for ipv6
};
var req = http.request(options, function(res) {
.. handle result here ..
});
req.write("");
req.end();
Run Code Online (Sandbox Code Playgroud)
设置family为4强制 ipv4,将其设置为6强制 ipv6。不设置它可以让任何一个工作。
我如何在 C# (.NET 3.5) 中做同样的事情
我可以想到一种方法,即自己为 A 或 AAAA 记录发出 DNS 请求,发出直接 IP 请求并设置host:标头。有没有更好的办法?
我试图确定为什么 Three.js 场景无法在 Safari 11.0.2 (OSX 10.12.6) 中呈现。
/**
* Generate a scene object with a background color
**/
function getScene() {
var scene = new THREE.Scene();
scene.background = new THREE.Color(0x111111);
return scene;
}
/**
* Generate the camera to be used in the scene. Camera args:
* [0] field of view: identifies the portion of the scene
* visible at any time (in degrees)
* [1] aspect ratio: identifies the aspect ratio of the
* scene in width/height
* …Run Code Online (Sandbox Code Playgroud)我是3js的新手,我有2个图像,即RGB图像和深度图像。我可以使用3js创建将这两者结合在一起的点云吗?如果是,那怎么办?
我遇到了一些问题:我试图访问已添加精灵的容器的宽度,但它似乎返回为 1。但是,当我在控制台中检查对象时,它给了我合适的宽度。
我写了一个代码笔来显示这个问题,但它是这样的:
var container = new PIXI.Container();
app.stage.addChild(container);
var sprite = PIXI.Sprite.fromImage('https://i2.wp.com/techshard.com/wp-
content/uploads/2017/05/pay-1036469_1920.jpg?ssl=1&w=200');
container.addChild(sprite);
console.log(container.height);
console.log(container);
Run Code Online (Sandbox Code Playgroud)
第一个控制台日志返回 1,而如果我进入第二个日志中的对象,它会返回 141。
我正在尝试像演示中那样将容器居中。演示容器返回正确的宽度,除非您尝试仅对一只“兔子”执行此操作(用互联网图像替换兔子纹理,并且 for 循环也被注释掉)。
有关于此的正确方法有什么建议吗?干杯
我想在动画过程中修改相机的 FOV 值。不幸的是,一旦我实现了 FOV 值,我就可以观察到我的场景变得更小。
所以我一直想知道,FOV 值和透视相机的距离位置之间的数学联系是什么?
这个想法是在 FOV 值发生变化时拥有相同的场景(通过修改相机位置来实现相同的大小)。
非常感谢。
编辑1:
这是说明我的问题的片段:当我实现相机的 FOV 值(从 4 到 45)时,我的方块和相机之间的距离发生了变化。我该如何预防呢?
let W = window.innerWidth, H = window.innerHeight;
let renderer = new THREE.WebGLRenderer( { antialias: true, alpha: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( W, H );
document.body.appendChild( renderer.domElement );
let camera = new THREE.PerspectiveCamera( 4, W/H, 1, 100 );
let scene = new THREE.Scene();
camera.position.set(0,0,14);
camera.lookAt(0,0,0);
let geo = new THREE.BoxGeometry(0.5, 0.5, 0.5);
let mat = new THREE.MeshNormalMaterial();
let mesh = new …Run Code Online (Sandbox Code Playgroud)