- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
react 的交易 View 带有 document.body,我想在父 div 中插入 Canvas 。但它会附加到 body 的末端。尝试了很多可能的解决方案,但没有任何效果。
Graph代码如下:
import { createChart } from "lightweight-charts";
function Graph() {
var chart = createChart(document.body, {
width: 600,
height: 300,
crosshair: {
mode: "normal"
}
});
var candleSeries = chart.addCandlestickSeries();
var data = [
{ time: "2018-10-19", open: 54.62, high: 55.5, low: 54.52, close: 54.9 },
{ time: "2018-10-22", open: 55.08, high: 55.27, low: 54.61, close: 54.98 },
{ time: "2018-10-23", open: 56.09, high: 57.47, low: 56.09, close: 57.21 },
{ time: "2018-10-24", open: 57.0, high: 58.44, low: 56.41, close: 57.42 },
{ time: "2018-10-25", open: 57.46, high: 57.63, low: 56.17, close: 56.43 },
{ time: "2018-10-26", open: 56.26, high: 56.62, low: 55.19, close: 55.51 },
{ time: "2018-10-29", open: 55.81, high: 57.15, low: 55.72, close: 56.48 },
{ time: "2018-10-30", open: 56.92, high: 58.8, low: 56.92, close: 58.18 },
{ time: "2018-10-31", open: 58.32, high: 58.32, low: 56.76, close: 57.09 },
{ time: "2018-11-01", open: 56.98, high: 57.28, low: 55.55, close: 56.05 },
{ time: "2018-11-02", open: 56.34, high: 57.08, low: 55.92, close: 56.63 },
{ time: "2018-11-05", open: 56.51, high: 57.45, low: 56.51, close: 57.21 },
{ time: "2018-11-06", open: 57.02, high: 57.35, low: 56.65, close: 57.21 },
{ time: "2018-11-07", open: 57.55, high: 57.78, low: 57.03, close: 57.65 },
{ time: "2018-11-08", open: 57.7, high: 58.44, low: 57.66, close: 58.27 },
];
candleSeries.setData(data);
var lastClose = data[data.length - 1].close;
var lastIndex = data.length - 1;
var targetIndex = lastIndex + 105 + Math.round(Math.random() + 30);
var targetPrice = getRandomPrice();
var currentIndex = lastIndex + 1;
var currentBusinessDay = { day: 29, month: 5, year: 2019 };
var ticksInCurrentBar = 0;
var currentBar = {
open: null,
high: null,
low: null,
close: null,
time: currentBusinessDay
};
function mergeTickToBar(price) {
if (currentBar.open === null) {
currentBar.open = price;
currentBar.high = price;
currentBar.low = price;
currentBar.close = price;
} else {
currentBar.close = price;
currentBar.high = Math.max(currentBar.high, price);
currentBar.low = Math.min(currentBar.low, price);
}
candleSeries.update(currentBar);
}
function reset() {
candleSeries.setData(data);
lastClose = data[data.length - 1].close;
lastIndex = data.length - 1;
targetIndex = lastIndex + 5 + Math.round(Math.random() + 30);
targetPrice = getRandomPrice();
currentIndex = lastIndex + 1;
currentBusinessDay = { day: 29, month: 5, year: 2019 };
ticksInCurrentBar = 0;
}
function getRandomPrice() {
return 10 + Math.round(Math.random() * 10000) / 100;
}
function nextBusinessDay(time) {
var d = new Date();
d.setUTCFullYear(time.year);
d.setUTCMonth(time.month - 1);
d.setUTCDate(time.day + 1);
d.setUTCHours(0, 0, 0, 0);
return {
year: d.getUTCFullYear(),
month: d.getUTCMonth() + 1,
day: d.getUTCDate()
};
}
setInterval(function() {
var deltaY = targetPrice - lastClose;
var deltaX = targetIndex - lastIndex;
var angle = deltaY / deltaX;
var basePrice = lastClose + (currentIndex - lastIndex) * angle;
var noise = 0.1 - Math.random() * 0.2 + 1.0;
var noisedPrice = basePrice * noise;
mergeTickToBar(noisedPrice);
if (++ticksInCurrentBar === 5) {
// move to next bar
currentIndex++;
currentBusinessDay = nextBusinessDay(currentBusinessDay);
currentBar = {
open: null,
high: null,
low: null,
close: null,
time: currentBusinessDay
};
ticksInCurrentBar = 0;
if (currentIndex === 5000) {
reset();
return;
}
if (currentIndex === targetIndex) {
// change trend
lastClose = noisedPrice;
lastIndex = currentIndex;
targetIndex = lastIndex + 5 + Math.round(Math.random() + 30);
targetPrice = getRandomPrice();
}
}
}, 200);
return null;
}
export default Graph;
父组件:
import React from "react";
import Graph from "./Graph";
function App() {
return (
<div
style={{
flex: 1,
flexDirection: "column",
background: "orange",
justifyContent: "center",
alignItems: "center"
}}
>
<Graph />
<h1>It is to append graph into body</h1>
</div>
);
}
export default App;
我已经尝试过 refs,不同的 DOM 操作方法,但没有任何效果。如果有人可以帮助我找到解决方案,那就太好了。
最佳答案
我在使用错误逻辑的 useRef 并让它与这些更改一起工作,对于可能遇到相同类型问题的人:
import { createChart } from "lightweight-charts";
import React from 'react';
const Graph = () => {
const chartRef = React.useRef(null);
React.useEffect(()=> {
if(chartRef.current){
const chart = createChart(chartRef.current, {
width: 600,
height: 300,
crosshair: {
mode: "normal"
}
});
prepareChart(chart);
}
}, [])
function prepareChart(chart) {
var candleSeries = chart.addCandlestickSeries();
var data = [
{ time: "2018-10-19", open: 54.62, high: 55.5, low: 54.52, close: 54.9 },
{ time: "2018-10-22", open: 55.08, high: 55.27, low: 54.61, close: 54.98 },
{ time: "2018-10-23", open: 56.09, high: 57.47, low: 56.09, close: 57.21 },
{ time: "2018-10-24", open: 57.0, high: 58.44, low: 56.41, close: 57.42 },
{ time: "2018-10-25", open: 57.46, high: 57.63, low: 56.17, close: 56.43 },
];
candleSeries.setData(data);
var lastClose = data[data.length - 1].close;
var lastIndex = data.length - 1;
var targetIndex = lastIndex + 105 + Math.round(Math.random() + 30);
var targetPrice = getRandomPrice();
var currentIndex = lastIndex + 1;
var currentBusinessDay = { day: 29, month: 5, year: 2019 };
var ticksInCurrentBar = 0;
var currentBar = {
open: null,
high: null,
low: null,
close: null,
time: currentBusinessDay
};
function mergeTickToBar(price) {
if (currentBar.open === null) {
currentBar.open = price;
currentBar.high = price;
currentBar.low = price;
currentBar.close = price;
} else {
currentBar.close = price;
currentBar.high = Math.max(currentBar.high, price);
currentBar.low = Math.min(currentBar.low, price);
}
candleSeries.update(currentBar);
}
function reset() {
candleSeries.setData(data);
lastClose = data[data.length - 1].close;
lastIndex = data.length - 1;
targetIndex = lastIndex + 5 + Math.round(Math.random() + 30);
targetPrice = getRandomPrice();
currentIndex = lastIndex + 1;
currentBusinessDay = { day: 29, month: 5, year: 2019 };
ticksInCurrentBar = 0;
}
function getRandomPrice() {
return 10 + Math.round(Math.random() * 10000) / 100;
}
function nextBusinessDay(time) {
var d = new Date();
d.setUTCFullYear(time.year);
d.setUTCMonth(time.month - 1);
d.setUTCDate(time.day + 1);
d.setUTCHours(0, 0, 0, 0);
return {
year: d.getUTCFullYear(),
month: d.getUTCMonth() + 1,
day: d.getUTCDate()
};
}
setInterval(function() {
var deltaY = targetPrice - lastClose;
var deltaX = targetIndex - lastIndex;
var angle = deltaY / deltaX;
var basePrice = lastClose + (currentIndex - lastIndex) * angle;
var noise = 0.1 - Math.random() * 0.2 + 1.0;
var noisedPrice = basePrice * noise;
mergeTickToBar(noisedPrice);
if (++ticksInCurrentBar === 5) {
// move to next bar
currentIndex++;
currentBusinessDay = nextBusinessDay(currentBusinessDay);
currentBar = {
open: null,
high: null,
low: null,
close: null,
time: currentBusinessDay
};
ticksInCurrentBar = 0;
if (currentIndex === 5000) {
reset();
return;
}
if (currentIndex === targetIndex) {
// change trend
lastClose = noisedPrice;
lastIndex = currentIndex;
targetIndex = lastIndex + 5 + Math.round(Math.random() + 30);
targetPrice = getRandomPrice();
}
}
}, 200);
}
return <div ref={chartRef} />;
}
export default Graph;
关于reactjs - React-DOM:无法将交易 View Canvas 从 'lightweight-charts' 附加到正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60220841/
(这可能是一个愚蠢的问题和一个 WTF 的结合,但这里什么也没有) 我想在我的界面中“绘制”线条或区域 - 通常是 TableLayoutPanel 中的分隔符。目前我所做的只是在行中转储一个面板并将
在研究 Direct2D 支持哪些 COM 单元线程模型时,我发现尽管外观和事实可以通过 COM 互操作性使用来自 .NET 的 API,Direct2D (like other DirectX AP
我有一个回调想执行一次。为了争论起见,我们假设它看起来像这样: final X once = new X(1); Runnable r = new Runnable() { @Override
我正在调试一个程序 (VS2008),我正在单步执行代码行。我遇到了调用委托(delegate)函数的一行,我试图进入它。但是,该方法并没有像我预期的那样进入方法,而是被绕过了,调试器进入了我认为是委
我一直看到 SOAP 是“重量级”而 REST 是“轻量级”。根据哪些参数,我们可以判断 REST 比 SOAP 轻量级? 我们公司之前使用的是 IFW 模型网络服务。但是我们的管理层告诉我们要在 R
当我使用 Java 的 AWT 时,创建一个 Font 对象的开销有多大?我应该在可行的时候缓存 Font,还是它只是对 AWT 已经在内部缓存的重量级字体的轻量级引用? 最佳答案 如果你查看 Fon
我正在阅读有关如何使用 Paxos 在 C* 中实现轻量级事务以及它们如何提供线性化能力的信息。但我想知道为什么它们被称为“轻量级”。它们也称为比较和设置。那么什么特征定义了一个事务是轻量级的呢? 最
我已经通过一些简单的方式(删除属性、添加属性、删除索引)更新了现有 iPhone 应用程序的模型,并且可以使用自动轻量级迁移来迁移持久存储。 由于数据集的典型大小,处理时间并非微不足道,值得用户反馈。
我的理解是 Windows 上的 Docker 目前在底层使用“常规 VM”。 WSL2 ( and Docker ) 将切换到使用轻量级 VM。但这实际上意味着什么?它只是使用较小的初始内存占用空间
我的目标是实现一个检测嵌套 using 是否存在的谓词别名(或 typedef )充当轻量级标签以指示类具有某些属性(用于泛型编程)。例如,has_my_tag谓词的行为应如下所示: struct A
我正在尝试使用 Lightweight-Stream-API用于支持低于 API-24 的版本。它适用于升序,但如何降序 sortBy()。 List persons = Arrays.asList
我正在尝试更新实现核心数据存储的应用程序。我正在向其中一个实体添加一个属性。 我将以下代码添加到我的委托(delegate)类中: - (NSPersistentStoreCoordinator *)
我正在设计一个 Node.js 应用程序来执行需要不同时间的任务。当应用程序执行这些任务时,我想显示一个加载微调器。然而,我的加载微调器对 CPU 的负担比我预期的要多得多。在任务管理器中查看我的 C
我想在轻量级 Java 游戏库 (lwjgl) 中启用全屏。我有一个支持全屏的显示模式,但由于某种原因它仍然没有更改为全屏: public static void main(String[]
我一直在使用STLport 开发基于wince 的自定义操作系统,但从现在开始我正在考虑使用windows 提供的STL。我读到它们在功能上没有什么不同,所以目前重要的是我的图像大小。不幸的是,我不能
我已经根据 1.2 Raven Studio 的做法和将代码移植到 Windows 控制台的方式,实现了我认为的删除数据库(作为服务运行的 raven)的正确方法。 static class Prog
我想让我的应用程序能够在添加时自动进行轻量级迁移我的核心数据模型的新属性。 在 Apple 的指南中,这是我能找到的有关该主题的唯一信息: Automatic Lightweight Migratio
如果我已经发布的 v1 没有版本化的核心数据模型,我可以使用“自动轻量级迁移”吗? 如果是,我需要应用的记录步骤是否有任何更改? 最佳答案 您不仅可以做到这一点,从某种意义上说,这是您可以做到这一点的
我正在使用 Java BouncyCaSTLe 所谓的“轻量级”API 通过 TCP 套接字建立 TLS 连接。 我想验证由受信任的 CA 之一签署的服务器提供的证书链。这听起来像是一个相当普遍的任务
react 的交易 View 带有 document.body,我想在父 div 中插入 Canvas 。但它会附加到 body 的末端。尝试了很多可能的解决方案,但没有任何效果。 Elements
我是一名优秀的程序员,十分优秀!