使用 Hooks/Functional 组件在 React 中优化和使代码更具可读性的更好方法是什么?每个组件有一个 setState 钩子还是多个?
为了扩展我的问题,请考虑以下内容:
使用钩子,我们可以使用多个状态,以某种方式更方便地拆分特定用途的状态(例如,一种状态用于用户数据,另一种用于保存加载标志,另一种用于为 API 检索的数据等) . 在我的第一步中,我确信最好的方法是每个我想要管理的数据都有多个状态……但是,一段时间后,当我想要时,我开始遇到多个状态之间的同步问题更新/读取效果函数中的多个状态(useEffect)。
所以,我开始相信使用 Hooks 管理状态的最佳方法它只有一个使用对象的状态并从这里管理我的所有数据......就像类组件......
const [data, setData] = useState({
retrieveData: false,
apiData: [],
userInfo: [],
showModal: false
})
// To update:
setData(oldData => {
return { ...oldData, showModal: true }
})
// Or:
setData({ ...data, retrieveData: true })
Run Code Online (Sandbox Code Playgroud)
在我看来,最好有一个状态,但这可能会以某种我没有考虑的方式影响性能/可读性?
我有一个巨大的DataTable,我需要遍历每一行并验证一个特定的值.
哪种方法给我更多的性能,IF ELSE或SELECT CASE的结构?(我专注于为我提供最佳性能的方法)
如果是(方法#1)
For Each vRow In vDTtemp.Rows
If vRow("Item") = "Time" Then
vRow("Result") = "000"
ElseIf vRow("Item") = "DateTime" Then
vRow("Result") = "001"
ElseIf vRow("Item") = "String" Then
vRow("Result") = "002"
Else
vRow("Result") = "N/A"
End If
Next
Run Code Online (Sandbox Code Playgroud)
选择案例(方法#2)
For Each vRow In vDTtemp.Rows
Select Case vRow("Item")
Case "Time"
vRow("Result") = "000"
Case "DateTime"
vRow("Result") = "001"
Case "String"
vRow("Result") = "002"
Case Else
vRow("Result") = "N/A"
End Select
Next
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来获取我的 Web 项目的根 URL;例如:
http://localhost:52390/pages/user.aspx
http://lst.pg.com/iLearn/pages/user.aspx
预期结果:http : //lst.pg.com/iLearn
存在一种在 ASPX 中实现这一目标的方法吗?或者在 Javascript/jQuery 中?
我有一个在 Microsoft Framework 3.5 上创建的 Winform 项目。用户可能安装了Windows 7或Windows XP以及Office 2007或更高版本。
我正在研究一个获取剪贴板数据并将其放入 C# 数据表的过程。我已经创建了一个方法来从剪贴板获取原始数据并将其上传到数据表中。
但在某些情况下,Excel 数据显示一个值,但内部有另一个值:
我正在研究一种从 Excel 获取原始数据的方法:
string XmlFmt = "XML Spreadsheet";
var clipboard = Clipboard.GetDataObject();
if (clipboard.GetDataPresent(XmlFmt))
{
var clipData = clipboard.GetData(XmlFmt);
StreamReader streamReader = new StreamReader((MemoryStream)clipData);
streamReader.BaseStream.SetLength(streamReader.BaseStream.Length - 1);
string xmlText = streamReader.ReadToEnd();
var stream = new StringReader(xmlText);
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlText);
DataSet dsExcelData = new DataSet();
dsExcelData.ReadXml(new XmlNodeReader(xmlDocument));
}
Run Code Online (Sandbox Code Playgroud)
但是,此方法会检索一个包含多个表的数据集,其中包含 Excel 数据每个部分的配置:
基本上,我想将这些结构转换为仅包含原始数据的简单数据表。有人可以帮助我提示如何实现这一目标?...我不想在此实现中使用第三方库。
是我的想法还是 Rider 没有很好地实现 Blazor / Hot Reload?
我尝试 JetBrains 的 Rider IDE 已经超过 6 个月了,我开始更喜欢使用 VS2022。但我最近开始了 Blazor 的一个新项目,从那时起我的观点开始下降......
无法调试具有多个项目的解决方案(如 VS2022 那样)...例如,我有一个包含 1 个服务器项目、1 个客户端项目和 1 个共享项目的解决方案。
使用 VS2022,我能够毫无痛苦地调试这两个项目...但是我用 Rider 尝试了一个月,完全不愉快...我是唯一一个持这种观点的人吗?
有没有办法正确调试 Rider 和 .Net 6 中多个项目的解决方案并使用热重载功能?
我尝试使用渐变背景颜色绘制一个表单,并将图像与透明度重叠.
这个有可能?
我想使用具有透明背景的平铺背景图像,并使用自定义线性渐变绘制背景.
我在vb.net中遇到LINQ问题.基本上我想在两个数据表之间创建LEFT JOIN.
这是两个数据表的信息:
Dim vDT1 As New DataTable
vDT1.Columns.Add("Key")
vDT1.Columns.Add("Data1")
vDT1.Columns.Add("Data2")
vDT1.Rows.Add({"01", "DATA1_AAAA", "DATA2_AAAA"})
vDT1.Rows.Add({"02", "DATA1_BBBB", "DATA2_BBBB"})
Dim vDT2 As New DataTable
vDT2.Columns.Add("Key")
vDT2.Columns.Add("Data3")
vDT2.Columns.Add("Data4")
vDT2.Rows.Add({"01", "DATA3_AAAA", "DATA4_AAAA"})
vDT2.Rows.Add({"01", "DATA3_BBBB", "DATA4_BBBB"})
vDT2.Rows.Add({"01", "DATA3_CCCC", "DATA4_CCCC"})
vDT2.Rows.Add({"01", "DATA3_DDDD", "DATA4_DDDD"})
Dim vDRnull As DataRow = vDTsec.Rows.Add
Run Code Online (Sandbox Code Playgroud)
为了实现LINQ JOIN,我尝试使用下一句:
From a In vDT1.AsEnumerable
Group Join bTemp In vDT2.AsEnumerable
On a.Field(Of String)("Key") Equals bTemp.Field(Of String)("Key")
Into Group From b In Group.DefaultIfEmpty(vDRnull)
Select a, b
Run Code Online (Sandbox Code Playgroud)
这是结果(但我想删除红色的行),我只想在第二个表中得到第一个:
任何帮助将不胜感激!
我用正确的方法编辑问题.感谢Jeff Mercado:
Dim vDT1 As New DataTable
vDT1.Columns.Add("Key")
vDT1.Columns.Add("Data1") …
Run Code Online (Sandbox Code Playgroud) 我有一个关于C#的奇怪问题.
我有一个静态类来存储方法作为扩展.然后,我有以下扩展名:
public static bool fwHasData(this DataTable table)
{
return (table == null || table.Rows.Count == 0) ? true : false;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:当我尝试在我的代码中使用扩展时,存在一些避免使用括号的方法吗?
用法:
bool vHasData = MyDataTable.fwHasData(); // Works fine!
Run Code Online (Sandbox Code Playgroud)
预期用途:
bool vHasData = MyDataTable.fwHasData; // Removing the parentheses
Run Code Online (Sandbox Code Playgroud)
非常感谢!
我有一个委托方法在我的应用程序中运行繁重的进程(我必须使用MS Framework 3.5):
private delegate void delRunJob(string strBox, string strJob);
Run Code Online (Sandbox Code Playgroud)
执行:
private void run()
{
string strBox = "G4P";
string strJob = "Test";
delRunJob delegateRunJob = new delRunJob(runJobThread);
delegateRunJob.Invoke(strBox, strJob);
}
Run Code Online (Sandbox Code Playgroud)
在该方法的某些部分 runJobThread
我调用外部程序(SAP - 远程函数调用)来检索数据.执行该行可能需要1-30分钟.
private void runJobThread(string strBox, string strJob)
{
// CODE ...
sapLocFunction.Call(); // When this line is running I cannot cancel the process
// CODE ...
}
Run Code Online (Sandbox Code Playgroud)
我想让用户取消整个过程.
怎么能实现这个?我尝试了一些方法; 但我陷入了同样的境地; 当这条特定的线路运行时,我无法停止该过程.
我对 StyledComponents 有疑问,是否可以使用React.Fragment
或任何其他现有组件创建样式?
我使用这个例子(意图是样式ContainerFragment
将背景绘制为蓝色并使用所有样式)
如果不可能,是否存在另一种解决方法?显式使用 Fragment 作为示例。
更新:我在这个问题上针对我的真正问题提出了一个具体问题
c# ×4
vb.net ×3
datatable ×2
javascript ×2
reactjs ×2
asp.net ×1
blazor ×1
clipboard ×1
cycle ×1
delegates ×1
excel ×1
forms ×1
graphics ×1
hot-reload ×1
if-statement ×1
jquery ×1
left-join ×1
linq ×1
performance ×1
react-hooks ×1
rider ×1
styles ×1
typescript ×1
url ×1
xmldocument ×1