网上有很多答案解释为什么我们可能不需要派生 state,但它到底是什么?它是从哪里“衍生”出来的?为什么这很重要,它与 React 应用程序中处理状态的正确方式有何不同?
Previous render Next render
------------------------------------------------------
1. useState useState
2. useContext useContext
3. useEffect useEffect
4. undefined useState
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
in ExperienceDetailContainer (created by ConnectFunction)
in ConnectFunction (created by Route)
in Route (created by withRouter(Connect(ExperienceDetailContainer)))
in withRouter(Connect(ExperienceDetailContainer)) (created by ExperiencePage)
Run Code Online (Sandbox Code Playgroud)
使用钩子在这里出现意外错误。根据我的理解,只要以可预测的顺序调用钩子,一切都应该正常工作。查看我的组件告诉我就是这种情况,我无法理解错误的来源。
import React, { useState, useEffect } from 'react'
import { withRouter } from 'react-router-dom'
import T from 'prop-types'
import { useWait } from 'react-wait'
import { connect } from 'react-redux'
import api from 'services/api'
import {
formattedDateWithoutTime,
getTimesForCurrentDate
} from 'utils/helpers' …Run Code Online (Sandbox Code Playgroud) 我正在尝试将纱线工作区 + lerna 实施到我的项目中。我有一个简单的结构:
--package.json
--node_modules/
--@app/
|--client/
|--package.json
|--node_modules/
|--server/
|--package.json
|--node_modules/
|--db/
|--package.json
|--node_modules/
Run Code Online (Sandbox Code Playgroud)
其中 client/ 是React-Native应用程序。我知道react-native中的陷阱,并修改了我的根,/package.json如下所示:
"workspaces": {
"packages": [
"@app/*"
],
"nohoist": [
"**/react-native",
"**/react-native/**",
]
},
Run Code Online (Sandbox Code Playgroud)
据我了解,这应该可以防止 React Native 本身以及 React-Native 的任何依赖项被提升。react-native-linear-gradient然而,我所经历的是像和react-native-reanimated(仅存在于)之类的反应本机库client/package.json正在根级别提升和安装node_modules。被提升的甚至不仅仅是原生模块。Javascript 依赖关系也被提升:
当然,该nohoist选项甚至不应该在这里发挥作用,因为这些模块仅在client/目录中使用。
那么为什么他们会被吊到根上呢?
为了更好地衡量,我删除了yarn.lock每个工作区中的文件,只保留根级别的文件。运行lerna clean和后,我已在根级别rm -rf node_modules运行。yarn install
有趣的是,这个安装时间非常长(3-5 分钟)。甚至光是去除根层就需要20秒左右node_modules。我完全不确定这对于纱线工作区+lerna 是否正常。
我正在学习使用这个程序.我几个星期到学习它,而且我了解大部分很好,但我就是无法得到时使用的一抓CDbl,CInt,CStr等功能.以下是我无法掌握的几行代码示例:
If IsNumeric(txtFirst.Text) And IsNumeric(txtSecond.Text) Then
txtSum.Text = CStr(CDbl(txtFirst.Text) + CDbl(txtSecond.Text))
Run Code Online (Sandbox Code Playgroud)
该程序应该采用用户输入的两个数字并将它们加在一起.简单.我正在玩它,我拿出了CDbl和CStr函数,并且两个应该加在一起的数字只是并排添加(例如,如果我输入2和15作为我的数字它会吐出215 ).
所以我很想知道何时使用这些功能.
它怎么说第二行CStr(CDbl(呢?为什么我需要转换为double,然后转换为字符串?这是我的理解,除非我读错了.
我的另一个问题是,如果我宣布var1为Dim var1 as Double.我经常看到下一行var1 = CDbl(txtbox.text)等等.我不明白为什么我们需要在这里转换为Double,因为当我将变量声明为double时,它应该已经是双重形式了,不应该吗?
这来自我的React项目,这是我从未见过的东西:
const { list, loading, failed } = this.props
return <ExperienceList {…{ list, loading, failed }} />
Run Code Online (Sandbox Code Playgroud)
具体来说,我指的是花括号的散布运算符。我习惯在里面看到它们。
收到此错误,但与我在堆栈溢出中发现的其他帖子不同,这不是因为扩展运算符没有出现在最后。事实上,它的发生是因为尾随逗号:
const SlashedPrice = ({
price,
currencySymbol,
...props,
}) => {
Run Code Online (Sandbox Code Playgroud)
当我从 中删除逗号时...props,错误消失了。起初,我认为这是有通天的问题,但我将没有运气2分新的规则:"@babel/plugin-proposal-object-rest-spread"和"syntax-trailing-function-commas",
在这一点上,我不知道是什么导致了这个问题。我可以从哪里开始寻找调试?
背景:我的代码库中的所有内容都运行良好,直到我删除了 node_modules 和 reran yarn install。
我正在尝试向我的 RN 应用程序添加功能,以允许用户在他们手机的文件系统中创建一个新目录。
我尝试编写代码,以便该函数在路径 /storage/emulated/0/AppName/NewFolder 中创建一个目录,因为 /storage/emulated/0 与我用来存储用户的其他应用程序使用的路径相同数据(例如录音应用程序)
makeDirectory = () => {
const { currentFolder, units } = this.props;
const directoryName = 'New Folder'
const currentDirectory = units
const absolutePath = `/storage/emulated/0/MyApp/${currentDirectory}`
RNFS.mkdir(absolutePath)
.then((result) => {
console.log('result', result)
})
.catch((err) => {
console.warn('err', err)
})
}
Run Code Online (Sandbox Code Playgroud)
但是,这只是给我一个错误:无法创建目录。我觉得我在这里遗漏了一些东西,不应该将这样的文件保存到手机系统中。
我的最终目标是让应用程序拥有自己的文件夹系统,该系统将被镜像到 /storage/emulated/0/MyApp/home
Java在此方面更为明确,因此初学者更容易理解代码在做什么,但是学习Kotlin知道when时有一个经验法则:指示它返回什么,而何时返回扩展课程?例:
data class SlothGeneric(val slothName: String,
val isTwoFingered: Boolean,
var slothWeight: Int): Mammal(slothName)
Run Code Online (Sandbox Code Playgroud)
我们如何知道该类SlothGeneric是否正在返回一个Mammal类,或者是否正在扩展它?
我知道这个问题与对 React Router 工作方式的根本误解有关,更具体地说,可能是历史对象。我有一个名为 Search 的组件,它允许用户搜索特定城市。该组件出现在整个应用程序的多个位置,包括“/”和“/:cityname”。
从“/”开始,组件按预期工作,并将新的 url 参数正确推送到 url 上,并且 url 变为“/vancouver”。但是,从 '/vancouver' 开始,当我使用相同的组件时,该 url 的行为不符合预期。例如,如果我进入伊斯坦布尔,我会被正确定向到 /istanbul,但是当我继续浏览应用程序并单击项目时,我希望被定向到“/istanbul/item1”。但是,目前发生的情况是我最终到达了 '/istanbul/istanbul/item1',当然没有找到,并返回 404。
这是在选择城市时调用的函数(在搜索组件中找到)
const onSuggestionSelected = (event, { suggestion }) => {
props.history.push(`/${suggestion.nickname}`)
}
Run Code Online (Sandbox Code Playgroud)
带有路由的 App.js
<Switch>
<Route exact path="/" component={HomePage} />
<Route exact path="/terms-of-service" component={TermsOfServicePage} />
<Route exact path="/privacy-policy" component={PrivacyPolicyPage} />
<Route exact path="/:cityname/personalize" component={FilterPage} />
<Route exact path="/:cityname/experiences" component={SearchPage}>
<Redirect to="/:cityname" />
</Route>
<Route exact path="/:cityname" component={SearchPage} />
<Route exact path="/:cityname/experiences/:experiencename" component={ExperiencePage} />
<Route exact path="/:cityname/experiences/:experiencename/summary" component={(routeProps) => <SummaryPage {...routeProps} …Run Code Online (Sandbox Code Playgroud) 我需要一种.zshrc在每次执行命令时自动获取源的方法。PROMPT每次执行命令时都需要更新,以便在提示中显示相关信息。
我使用Watson cli来跟踪时间。在我之前的 bash 设置中,我在提示符 ( $PS1)前面加上了一个符号,指示计时器是否正在运行(红色/绿色)。我用 Oh My Zsh 模仿了这个功能,如下(在主题文件中):
WATSON_DIR="$HOME/Library/Application Support/watson"
watson_status() {
local txtred="${fg_bold[red]}"
local txtgrn="${fg_bold[green]}"
local txtrst="${reset_color}"
# Started
local status_color="$txtgrn"
# Stopped
if [[ $(cat "$WATSON_DIR/state") == '{}' ]]; then
status_color="$txtred"
fi
echo -e "$status_color""?""$txtrst"
}
PROMPT="??? %{$(watson_status) $fg_bold[green]%}%~%{$reset_color%}$(git_prompt_info) ? %{$FG[130]%}%*%{$reset_color%}
??? $ "
Run Code Online (Sandbox Code Playgroud)
该图标将指示 .zshrc 执行时状态的颜色。例如,如果计时器正在运行并且图标正确指示为绿色,则停止计时器不会导致图标变为红色。为了看到图标改变颜色,我必须获取 .zshrc。
这表示watson_status()每次执行命令时都需要运行该函数,以给出命令执行时的最新状态
我正在 React Native 上运行WatermelonDB(使用 SQLite)。我正在使用 iOS 模拟器,我正在尝试找到数据库文件,以便我可以直接查询它。看来我能够成功保存到数据库,因为我可以从应用程序内查询数据并且它会被持久化。
使用htop,我已经能够找到在模拟器上运行的应用程序的运行进程。但是,当我cd进入该目录时,我看不到任何.db文件。我什至可以转到所有模拟器~/Library/Developer/CoreSimulator/Devices/和ack所有数据库文件的根目录,但仍然没有显示任何内容。
接下来,我尝试在 Xcode 中启动该应用程序,因为我遇到过其他建议检查 Xcode 日志的帖子,这应该会显示数据库位置。唉,这没有向我显示任何信息。
我首先有兴趣知道,鉴于我找不到文件,任何东西怎么可能被持久化db。
其次,我应该从 Xcode 构建我的应用程序,还是可以使用命令行react-native run-ios?我可以看到运行此命令在底层使用了 Xcode,但我不确定使用 Xcode 是否有好处。尽管如此,使用 Xcode 并没有为我提供我正在寻找的答案。
reactjs ×5
react-native ×2
babeljs ×1
double ×1
generics ×1
javascript ×1
kotlin ×1
lerna ×1
oh-my-zsh ×1
react-hooks ×1
react-router ×1
string ×1
vb.net ×1
yarnpkg ×1
zsh ×1