原始类型(Number,String等)按值传递,但是对象是未知的,因为它们可以是值传递(如果我们认为持有对象的变量实际上是对象的引用)并且通过引用传递(当我们认为对象的变量保存对象本身时).
虽然最后并不重要,但我想知道提交传递约定的参数的正确方法是什么.是否有JavaScript规范的摘录,它定义了与此相关的语义?
我有一个对象,可以是任意数量的级别,可以有任何现有的属性.例如:
var obj = {
db: {
mongodb: {
host: 'localhost'
}
}
};
Run Code Online (Sandbox Code Playgroud)
在那我想设置(或覆盖)属性,如下所示:
set('db.mongodb.user', 'root');
// or:
set('foo.bar', 'baz');
Run Code Online (Sandbox Code Playgroud)
属性字符串可以有任何深度,值可以是任何类型/东西.
如果属性键已存在,则不需要合并作为值的对象和数组.
上一个示例将生成以下对象:
var obj = {
db: {
mongodb: {
host: 'localhost',
user: 'root'
}
},
foo: {
bar: baz
}
};
Run Code Online (Sandbox Code Playgroud)
我怎么才能实现这样的功能呢?
好的,我会尽快做到这一点,因为它应该是一个简单的解决方案......
我读了很多类似的问题,答案似乎很明显.从来没有什么我不得不抬头看!但是......我有一个错误,我无法理解如何解决或为什么会发生这种情况.
如下:
class NightlifeTypes extends Component {
constructor(props) {
super(props);
this.state = {
barClubLounge: false,
seeTheTown: true,
eventsEntertainment: true,
familyFriendlyOnly: false
}
this.handleOnChange = this.handleOnChange.bind(this);
}
handleOnChange = (event) => {
if(event.target.className == "barClubLounge") {
this.setState({barClubLounge: event.target.checked});
console.log(event.target.checked)
console.log(this.state.barClubLounge)
}
}
render() {
return (
<input className="barClubLounge" type='checkbox' onChange={this.handleOnChange} checked={this.state.barClubLounge}/>
)
}
Run Code Online (Sandbox Code Playgroud)
更多代码围绕着这个,但这就是我的问题所在.应该工作吧?
我也试过这个:
handleOnChange = (event) => {
if(event.target.className == "barClubLounge") {
this.setState({barClubLounge: !this.state.barClubLounge});
console.log(event.target.checked)
console.log(this.state.barClubLounge)
}
Run Code Online (Sandbox Code Playgroud)
所以我有两个console.log(),都应该是一样的.我确实将状态设置为与event.target.checked它上面的行相同!
但它总是与它应该的相反.
我使用时也一样!this.state.barClubLounge; 如果它开始为假,在我第一次点击它仍然是假的,即使复选框是否被选中是基于状态!!
这是一个疯狂的悖论,我不知道最新情况,请帮忙!
对于我正在使用的插件,我必须有一个看起来像这样的状态:
getInitialState() {
return {
invalid: true,
access: {
access_code: '',
zipcode: '',
password: '',
confirm: '',
hospital_id: '',
},
}
},
Run Code Online (Sandbox Code Playgroud)
如何在不设置其余访问权限的情况下设置hospital_id的状态?
这似乎删除了除hospital_id之外的所有内容:
this.setState({access: {hospital_id: 1}})
Run Code Online (Sandbox Code Playgroud) 在带有钩子的React中,更新状态的正确方法是嵌套对象是什么?
export Example = () => {
const [exampleState, setExampleState] = useState(
{masterField: {
fieldOne: "a",
fieldTwo: {
fieldTwoOne: "b"
fieldTwoTwo: "c"
}
}
})
Run Code Online (Sandbox Code Playgroud)
一个人怎么会使用setExampleState到的更新exampleState来a(附加一个字段)?
const a = {
masterField: {
fieldOne: "a",
fieldTwo: {
fieldTwoOne: "b",
fieldTwoTwo: "c"
}
},
masterField2: {
fieldOne: "c",
fieldTwo: {
fieldTwoOne: "d",
fieldTwoTwo: "e"
}
},
}
}
Run Code Online (Sandbox Code Playgroud)
b (改变价值)?
const b = {masterField: {
fieldOne: "e",
fieldTwo: {
fieldTwoOne: "f"
fieldTwoTwo: "g"
}
}
})
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个函数,它接受一个键和一个值,并更新类型化对象上相应的键值对。这是我所追求的一个基本示例。
type x = {
prop : number,
other : string
}
let dataToUpdate : x = {
prop: 1,
other: "string"
}
function updateKey(key : string, value : number | string) {
dataToUpdate[key] = value;
}
Run Code Online (Sandbox Code Playgroud)
我通过上述实现收到此错误。
元素隐式具有
'any'类型,因为 type 的表达式'string'不能用于索引 type'x'。'string'在类型上找不到带有类型参数的索引签名'x'。(7053)
更新我被介绍了XY Problem 的想法。下面是我所追求的实际实现。我正在尝试在 React 中创建一个上下文,该上下文返回一个函数,该函数允许您仅更新存储在上下文中的对象内的特定属性
export function StoreProvider(props: any) {
const [storeData, setStoreData] = useState<StoreData>(initProviderData);
function setStoreKeyValue(keyToUpdate: keyof StoreData[], valueToSet: boolean | string | number | …Run Code Online (Sandbox Code Playgroud) 我有一个用户对象,他们可以在其中编辑他们的信息(电话号码、电子邮件等)
我无法访问回调name内部的输入setState并继续获取TypeError: Cannot read property 'name' of null
但是,当我记录event.target.name它时,它显示在那里。
当我更改一个简单的状态时,它可以工作:
假设状态值与目标名称相同。
this.setState({ [event.target.name]: value });
Run Code Online (Sandbox Code Playgroud)
我正在关注这篇文章以更新用户对象。
抱歉,如果这是重复的,我找不到我要找的东西。
handleUserChange(event) {
console.log(event.target.name);
const value = event.target.value
this.setState(prevState => ({
user: {...prevState.user, [event.target.name]: value }
}))
}
Run Code Online (Sandbox Code Playgroud)
编辑:我在类构造函数中正确绑定它,如下所示:
contructor(props) {
super(props);
...
this.handleUserChange = this.handleUserChange.bind(this)
}
Run Code Online (Sandbox Code Playgroud) 我有一个父功能组件<EditCard/>,它是在选择编辑表行按钮时打开的模态。此编辑卡包含一个名为的状态变量data,该变量由正在编辑的表行中的数据组成。我正在<EditCard/>使用useState钩子设置/修改状态。
<EditCard/>有一个子组件<CategoryDropdown/>,它是一个下拉列表,它接受一个 propdata.assignCategory作为它的选定值,还有一个回调handleChange(),它data用从下拉列表中选择的值更新状态值。
当我从下拉列表中选择一个新值时,会handleChange()被调用并被setData()调用,我看到状态正在更新,但<CategoryDropdown/>没有使用新的选定值重新呈现。
编辑卡组件代码
export default function EditCard(props) {
const [data, setData] = useState(props.data);
const handleChange = () => event => {
let d = data;
d.assignCategory = event.target.value;
setData(d);
};
let assignCategoryCol = data.assignCategory !== undefined ? <AssignCategoryCol data={data} handleChange={handleChange}/> : <></>;
return (
<div>
{assignCategoryCol}
<Button>Update</Button>
</div>
)
}
{props.data.bucketTotal}`} <Lock/></Typography>)
};
const AssignCategoryCol …Run Code Online (Sandbox Code Playgroud) 我的问题是:
如何使用多个选择更改默认设置对象的状态?
下面让我们说,我有状态checkDevice和checkCountry,所以在下面拨弄我设置的所有值false.
我想设置仅true在多选下拉列表中选择的属性的值.
例如:在多选,如果我只是选择US和UK然后在我的状态是有办法得到的东西,如:
checkCountry:
{
'US': true,
'UK': true,
'JP': false
}
Run Code Online (Sandbox Code Playgroud)
class Box extends React.Component {
constructor() {
super();
this.state = {
checkDevice: {
'iPhone 4': false,
'iPhone 5': false,
'iPhone 6': false,
'iPhone 7': false,
'iPhone 8': false,
'iPhone X': false,
},
checkCountry: {
'US': false,
'UK': false,
'JP': false
}
}
}
componentDidMount() {
$(document).ready(function() {
$('#country').material_select();
});
$(document).ready(function() {
$('#device').material_select();
}); …Run Code Online (Sandbox Code Playgroud)如何使用 访问和设置e.target.value类的动态setState?
我试过了this.setState({fields[e.target.name]: e.target.value});
class App extends Component {
constructor() {
super();
this.state = {
data: [],
fields: {
name: ''
}
}
}
handleChange = e => this.setState({fields[e.target.name]: e.target.value});
render() {
const { fields } = this.state;
return (
<>
<input type="text" name="name" placeholder="name" onChange={this.handleChange} value={fields.name} />
</>
)
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
我想在检查输入后在对象中添加一个新状态。项目状态是一个对象,里面有另一个对象
const [item, setItem] = useState({
series: '',
model: '',
addons: {
gps: false,
wifi: false,
esim: false,
},
price: ''
})
Run Code Online (Sandbox Code Playgroud)
更改系列,按值输入的模型是显而易见的,但如何更改插件中的对象?我不能这样做
onChange={(e) => setItem({ ...item, gps: e.target.checked })}
Run Code Online (Sandbox Code Playgroud)
或者
onChange={(e) => setItem({ ...item, addons.gps: e.target.checked })}
Run Code Online (Sandbox Code Playgroud)
代码:
import React, {useState} from "react";
import "./style.css";
export default function App() {
const [item, setItem] = useState({
series: '',
model: '',
addons: {
gps: false,
wifi: false,
esim: false,
},
price: ''
})
const sendItem = () => {
console.log(item, 'add …Run Code Online (Sandbox Code Playgroud) javascript ×10
reactjs ×9
react-hooks ×2
ecmascript-5 ×1
html ×1
input ×1
jquery ×1
object ×1
react-native ×1
typescript ×1