You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将React JS中Header组件的title设置为数组的指定元素

根因说明

你代码中声明的shoppinglist、currentitem都是普通JS变量,React不会监听这类变量的变更,也不会因为这类变量的修改触发组件重新渲染,所以即使你修改了数组内容,页面上的Header组件属性也不会更新。

修复方案

你需要使用React的useState Hook存储响应式数据,同时修改数组时要遵循不可变原则,返回新的数组实例触发组件重渲染。修改后的完整代码如下:

import { useState } from 'react';
import Header from './components/Header';

const App = () => {
  // 用useState声明响应式状态
  const [shoppingList, setShoppingList] = useState([]);
  const [currentItem, setCurrentItem] = useState("");

  function getData(val){
    console.warn(val.target.value)
    // 更新输入框内容的响应式状态
    setCurrentItem(val.target.value);
  }

  function logData() {
    // 不可变原则:基于原数组生成新数组,传入set方法触发更新
    setShoppingList(prev => [...prev, currentItem]);
  }

  function deleteItem() {
    // 不可变原则:生成删除最后一个元素后的新数组
    setShoppingList(prev => prev.slice(0, -1));
  }

  return (
    <div className="Container">
        <Header title = "grocery list" />
        <input type="text" onChange={getData}></input>
        <button onClick={logData}>add item to list</button>
        <button onClick={deleteItem}>delete item</button>
        <div className="listItems">
          {/* 兼容数组为空的情况,避免传undefined给title */}
          <Header title = {shoppingList[0] || "暂无列表项"} />
        </div>
    </div>
  );
}

export default App;

关键改动说明

  • 引入useState Hook声明两个响应式状态shoppingList、currentItem,状态变更会自动触发组件重渲染
  • 数组修改不再直接调用push/pop修改原数组,而是通过解构、slice等方法生成新数组后传入状态更新方法
  • 补充了数组为空时的默认值兼容,避免title属性接收异常值

内容的提问来源于stack exchange,提问作者ProfMonkey07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:18:01