相关疑难解决方法(0)

JavaScript是一种传递引用还是按值传递的语言?

原始类型(Number,String等)按值传递,但是对象是未知的,因为它们可以是值传递(如果我们认为持有对象的变量实际上是对象的引用)并且通过引用传递(当我们认为对象的变量保存对象本身时).

虽然最后并不重要,但我想知道提交传递约定的参数的正确方法是什么.是否有JavaScript规范的摘录,它定义了与此相关的语义?

javascript pass-by-reference pass-by-value

1311
推荐指数
19
解决办法
34万
查看次数

动态设置嵌套对象的属性

我有一个对象,可以是任意数量的级别,可以有任何现有的属性.例如:

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)

我怎么才能实现这样的功能呢?

javascript ecmascript-5

59
推荐指数
9
解决办法
5万
查看次数

为什么调用setState方法不会立即改变状态?

好的,我会尽快做到这一点,因为它应该是一个简单的解决方案......

我读了很多类似的问题,答案似乎很明显.从来没有什么我不得不抬头看!但是......我有一个错误,我无法理解如何解决或为什么会发生这种情况.

如下:

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; 如果它开始为假,在我第一次点击它仍然是假的,即使复选框是否被选中是基于状态!!

这是一个疯狂的悖论,我不知道最新情况,请帮忙!

html javascript event-handling reactjs

42
推荐指数
1
解决办法
6112
查看次数

如何为嵌套对象设置setState?

对于我正在使用的插件,我必须有一个看起来像这样的状态:

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)

javascript reactjs react-native

30
推荐指数
2
解决办法
3万
查看次数

与对象反应挂钩useState()

在带有钩子的React中,更新状态的正确方法是嵌套对象是什么?

export Example = () => {
  const [exampleState, setExampleState] = useState(
  {masterField: {
        fieldOne: "a",
        fieldTwo: {
           fieldTwoOne: "b"
           fieldTwoTwo: "c"
           }
        }
   })
Run Code Online (Sandbox Code Playgroud)

一个人怎么会使用setExampleState到的更新exampleStatea(附加一个字段)?

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)

javascript reactjs react-hooks

19
推荐指数
9
解决办法
2万
查看次数

如何在 TypeScript 中动态更新类型化对象上的键值对

我正在尝试创建一个函数,它接受一个键和一个值,并更新类型化对象上相应的键值对。这是我所追求的一个基本示例。

使用以下代码链接到代码沙箱

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)

typescript reactjs

6
推荐指数
1
解决办法
3773
查看次数

类型错误:无法读取 null 的属性“名称”

我有一个用户对象,他们可以在其中编辑他们的信息(电话号码、电子邮件等)

我无法访问回调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)

javascript reactjs

5
推荐指数
1
解决办法
7075
查看次数

React useState 钩子不会触发子组件的重新渲染

我有一个父功能组件<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)

javascript reactjs react-hooks

4
推荐指数
1
解决办法
1万
查看次数

通过事件处理程序更改React状态

我的问题是:

如何使用多个选择更改默认设置对象的状态?

下面让我们说,我有状态checkDevicecheckCountry,所以在下面拨弄我设置的所有值false.

我想设置仅true在多选下拉列表中选择的属性的值.

例如:在多选,如果我只是选择USUK然后在我的状态是有办法得到的东西,如:

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)

javascript jquery reactjs

1
推荐指数
1
解决办法
1812
查看次数

如何在react中设置类属性的值

如何使用 访问和设置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)

javascript reactjs

1
推荐指数
1
解决办法
9613
查看次数

React 中状态的 onChange 对象

我想在检查输入后在对象中添加一个新状态。项目状态是一个对象,里面有另一个对象

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 input object reactjs

0
推荐指数
1
解决办法
2825
查看次数