当前位置: 首页 > 知识库问答 >
问题:

useState set函数不调用句柄函数[重复]

叶建柏
2023-03-14

我试图通过提供一组预定义的数据在数组中存储多个值。选择选项是可单击的组件。我有两个数组,一个用于存储值,另一个用于选定值。

const [selected, setSelected] = useState<string[]>([]);
const [categories] = useState<string[]>([
  "fashion", "sports", "gaming", "lifestyles", "finance"
])

我有用于显示组件的自定义组件。当我单击它们时,所选状态不会更新,但在编辑器中再次更改/保存代码后,组件将正确渲染。有人知道吗。提前谢谢

const handlePress = (e) => {
    let temp = selectedValues || [];
    const val = temp?.findIndex(a => a === e);
    if (!temp || val === -1) {
      temp.push(e);
    } else {
      temp.splice(val, 1);
    }
    setSelectedValues(temp);
  }

  return (
    <>
      {categoryList.map(e => {
        return <CategoryItem
          key={e}
          text={e}
          selected={selectedValues.includes(e)}
          style={{ height: 28 }}
          handlePress={handlePress} />
      })}
    </>
  )

类别-item.tsx

<TouchableOpacity style={selected ? viewStyleSelected : viewStyle} onPress={() => handlePress(text)}>
  {content}
</TouchableOpacity >

共有1个答案

秦天宇
2023-03-14

您正在变异状态变量。因此,react认为它是同一个对象,不会重新渲染。您需要将新数组设置为selectedValues

const handlePress = (e) => {
  setSelectedValues(selectedVals => {
    return selectedVals.includes(e) ? [...selectedVals, e] :
    selectedVals.filter(val => val !== e)
  })
}
 类似资料:
  • 你可以创建任何MATLAB函数的句柄,然后用这些句柄作为函数链接的途径。函数句柄主要用来传递自变量列表给其他函数,用句柄执行函数或求值。 在MATLAB中,通过在函数名前加上符号@构造函数句柄。下面例子为SIN函数创建一个函数句柄,然后赋值给变量fhandle: fhandle = @sin; 用MATLAB的fevel函数对函数句柄求值。下面的plot_fhandle函数接收一个函数句柄和数据

  • 函数名称:判断句柄 函数功能:判断是否为有效句柄 函数方法 bool = io.type(file) 参数 类型 必填 说明 file userdata 是 需要判断的文件句柄 返回值 类型 说明 bool string “file“ - 一个打开的文件句柄,"closed file“ - 为一个已关闭的文件句柄,nil - 不是文件句柄 函数用例 file,msg = io.open("/mnt

  • 函数名称:关闭文件句柄 函数功能:关闭文件句柄 函数方法 io.close() 函数用例 file,msg = io.open("/mnt/sdcard/kazhu.txt") if file then dialog("打开成功",5000) file:close() else dialog("打开失败,失败原因:"..msg,5000) end

  • 这是python游戏的基本战利品表。 常见的,如果滴滚动到任何数字,包括13 不寻常,如果下降滚动14通过,并在18 如果跌落在19或20滚动 即使在满足条件的情况下,该程序也会忽略罕见掉落表,而是从罕见掉落表中取出一个项目,例如掉落=20 1000金币 有人能解释一下这里的问题吗?

  • 我在WordPress插件中有一个简单的jQuery脚本,它使用了如下jQuery包装器: 我从WordPress仪表板中调用这个脚本,并在jQuery框架加载后加载它。 当我检查Firebug中的页面时,我总是收到错误消息: TypeError:$不是函数 $(document).Ready(function(){ 我是否应该将脚本包装在这个函数中: 这个错误我已经犯了好几次了,不知道该怎么处理