我必须将 JSON 格式的数据存储在我的 Solidity 合约中。我不需要对数据进行任何操作。我只需要存储它、更新它并返回它。
假设我有 JSON 格式的数据,例如:
{'name': 'Nike', 'size':'12', 'color':'blue'}
Run Code Online (Sandbox Code Playgroud)
我目前正在将数据作为字符串传递给构造函数:
constructor(string _data) public {
data = _data;
}
Run Code Online (Sandbox Code Playgroud)
并通过简单地替换整个字符串来更新数据:
function updateData(string _data) public {
data = _data;
}
Run Code Online (Sandbox Code Playgroud)
我正在争论是否应该创建一个结构类型,命名为“Shoe”,并将每个属性作为参数传递:
constructor(string _name, uint size, string _color) public {
Shoe memory newShoe = Shoe({
name: _name,
size: _size,
color: _color
})
data = newShoe;
}
Run Code Online (Sandbox Code Playgroud)
我永远不需要存储多个鞋对象,并且将数据作为String传递似乎更简单、更容易,但我想知道使用Struct类型是否有优势。
我从我的网站客户端向后端 Node.js 服务器发送 API 请求,并通过 ID 查找特定文档,如下所示:
var ObjectID = require('mongodb').ObjectID;
db.collection('users').find({"_id": new ObjectID(req.body._id)})
Run Code Online (Sandbox Code Playgroud)
其中req.body._id等于整个 ID 字符串,例如'5d0381ad681a2a3aa1dc5872'
但是我更愿意只发送字符串的INC(不断增加的值)部分作为参数:'c5872'
我应该如何仅根据 INC 值查找特定文档?(我假设 INC 是独一无二的)
任何帮助是极大的赞赏。
我目前正在升级普通 React 应用程序以使用 Next.js(版本 7.0.0)。该应用程序最初是使用 Create-React-App 构建的,并利用 CRA 服务器内置的代理。
在开发过程中,我的 React 应用程序在端口 3000上运行,我有一个 Express 服务器在端口 5000上运行。在添加 Next.js 之前,我一直在package.json文件中使用代理对象将 API 请求路由到服务器。
API请求:
const res = await axios.get('/api/request')
Run Code Online (Sandbox Code Playgroud)
package.json 中的代理对象:
"proxy": {
"/api/*": {
"target": "http://localhost:5000"
}
}
Run Code Online (Sandbox Code Playgroud)
这一直工作得很好,但使用 Next.js 我现在收到一个错误:
GET http://localhost:3000/api/request 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)
^ 这应该指向 locahost:5000 (我的服务器)
有谁知道我如何能够将 API 请求从 React/Next.js 客户端路由到在不同端口上运行的 Express 服务器?
在我的 index.js 代码中,我检查了 process.env.NODE_ENV 变量的值,并期望它是“生产”,但在 Heroku 上,该变量注册的值是“开发”。
我读过 Heroku 默认情况下将此值设置为“生产”,但由于某种原因,它仍然注册为“开发”,即使我在 Config Vars 下显式设置该值,它仍然显示它正在开发。以下是我的 index.js 文件中的条件:
if (process.env.NODE_ENV === 'production') {
// serve production assets...
} else {
// serve development assets...
}
Run Code Online (Sandbox Code Playgroud)
如果我将线路更改为...
if (process.env.NODE_ENV === 'development') {
Run Code Online (Sandbox Code Playgroud)
生产资源在 Heroku 上得到了很好的服务。
关于如何让 process.env.NODE_ENV 在 Heroku 上注册为“生产”,有什么想法吗?
编辑:
在我的 webpack.js 文件中我正在这样做......
const env = process.env.NODE_ENV;
const config = {
mode: env || 'development'
};
module.exports = {
// some code...
...config, // 'development' or 'production' mode
// more code...
}
Run Code Online (Sandbox Code Playgroud)
我确实尝试将此值硬编码为“生产”,如下所示...... …
我有一个看起来像这样的按钮......
<View style={styles.addToFavoritesStyle}>
<Button onPress={this.addToFavorites}>ADD TO FAVORITES</Button>
</View>
addToFavorites() {
...run some code
}
Run Code Online (Sandbox Code Playgroud)
用户按下按钮后,如何将按钮文本更改为"从收藏中删除",更改按钮样式,并调用其他功能?
假设我有一个以下形式的数组:
const array = [{id: 1, title: "this"}, {id: 2, title: "that"}];
Run Code Online (Sandbox Code Playgroud)
我想更改给定对象中一个元素的值。例如,我的输出如下:
[{id: 1, title: "这个"}, {id: 2, title: "foo foo foo"}];
我将一个具有两个属性的对象传递给我的函数。第一个属性是我要修改的对象的id ,第二个属性是新标题:
[2, "foo foo foo"]
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码找到正确对象的索引:
index = array.findIndex(item => item.id === arr[0]);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何更改该元素并将其替换为我的新标题(arr[1])。
我想更改第二个对象中的标题元素而不改变数组。任何意见是极大的赞赏。
编辑:对于“不改变数组”的困惑,我们深表歉意。我的意思是我不希望返回的数组只是原始数组的突变,而是一个新数组。也许“不改变状态”会是更好的措辞选择。
例如,如果我要像这样返回一个数组: return [...state] 这将为我提供一个新数组(尽管没有任何更改),而不会改变原始数组。