代码之家  ›  专栏  ›  技术社区  ›  user19476497

如何使用useState修改数组以使其成为React中的常数

  •  2
  • user19476497  · 技术社区  · 2 年前

    在一个名为room的常量中有一个数组对象值。

    room = [
        {name: "buger", placeId: 252}
        {name: "pack", placeId: 253}
        {name: "apple", placeId: 254}
        {name: "peach", placeId: 255}
    ]
    

    此时,每当我在TextInput中写入字符时,我想使用onChangeroom函数来更改文件室中name的值。

    因此,当我在onChangeRoom函数中运行setRoom并附加[“name”]时,出现了一个意外的令牌错误。

    const [room, setRoom] = useState(
    targetFarm.children.map((v) => ({ name: v.name, placeId: v.placeId }))
    )
    
    
    const onChangeroom = useCallback((index) => (text) => {
        setRoom({ ...room, [index]["name"]: text });      // << this might cause error
    }, []);
    
    
    {targetFarm.children.map((item, index) => {
        return (
    <TextInput
    style={{ backgroundColor: 'orange' }}
    value={room[index]["name"]}
    onChangeText={onChangeroom(index)}
    />
    
    ...
        )
        }
    
    2 回复  |  直到 2 年前
        1
  •  1
  •   StepUp    2 年前

    index 在里面 map

    让我举个例子:

    const [room, setRoom] = useState([
        ...targetFarm.children
    ]);
    
    const onChangeroom = useCallback((index, text) => {
        
        setRoom(room.map((pr, i) => {
        if(i === index) {
          return {
            ...pr,        
            name: text
          }
        }
        else return pr;
      }))
    }, []);
    
        2
  •  0
  •   Gabriel Lupu    2 年前

    试着同时传球 index text onChangeRoom(text, index) 并修改 useCallback 钩子看起来像这样(请注意,两个参数都传递给钩子内的第二个函数):

    const onChangeroom = useCallback(() => (text, index) => {
        setRoom({ ...room, [index]["name"]: text });
    }, []);