反应选择的默认值,当我想发布具有空白页面输出的数据时,复选框不起作用

2023-12-05

我无法将获取的数据作为默认值放入下拉列表(反应选择)和复选框中?我有显示的下拉菜单(“好”,...),但默认值dishId:1 is Medium,所以我应该看到在我的下拉列表中已经选择了Medium,但事实并非如此(评论的问题相同)。

export default function MenuItemDisplay() {
...
    const [dish, setDish] = useState([])

    useEffect(() => {
        axios.post(url, { dishId })
            .then(res => {
                console.log(res)
                setDish(res.data.dishes [0])
            })
            .catch(err => {
                console.log(err)
            })
    }, [dishId]);

    const TASTE = [
        { label: "Good", value: "Good" },
        { label: "Medium", value: "Medium" },
        { label: "Bad", value: "Bad" }
    ];
    const COMMENT = [
        { label: "0", value: "0" },
        ...
    ];


function Checkbox({ value }) {
    const [checked, setChecked] = React.useState(true);

    return (
      <label>
        <input
          type="checkbox"
          defaultChecked={checked}
          onChange={() => setChecked(!checked)}
        />
        {value}
      </label>
    );
  }    

    return (
        <>
            <Dropdown
                style={styles.select}
                options={TASTE}
                defaultValue={TASTE.find((t) => t.label === dish.taste)}
                isMulti={true}
            />
           <Dropdown
                    style={styles.select}
                    options={COMMENT}
                    defaultValue={TASTE.find((t) => t.label === dish.comment)}
                    isMulti={true}
                />
           <Checkbox value={!!dish.trust} />

            {(dish.menu) !== "") ?
                <div>
                    Menu
                    <div >
                        {dish.menu}
                    </div>
                </div>
                : ""
            }
        </>
    );
}


export default function CustomDropdown({
    className,
    style,
    options,
    styleSelect,
    value,
    setValue,
    isMulti = false
}) {
    const styles = {
        select: {
            width: "100%",
            maxWidth: 200
        }
    };

    function changeSelect(option) {
        setValue(option.value);
    }

    return (
        <div style={style} onClick={(e) => e.preventDefault()}>
            {value && isMulti === false ? (
                <Tag
                    selected={value}
                    setSelected={setValue}
                    styleSelect={styleSelect}
                />
            ) : (
                <Select
                    className={className}
                    style={styles.select}
                    value={value}
                    onChange={changeSelect}
                    options={options}
                    isMulti={isMulti}
                />
            )}
        </div>
    );
}

export default function Tag({ selected, setSelected, styleSelect }) {
    const backgroundColor = styleSelect?.(selected?.label) ?? "grey";
    return (
        <div style={{
            display: "flex",
            justifyContent: "space-around",
            padding: "0.1em",
            backgroundColor: backgroundColor,
            borderRadius: "4px",
            color: "white",
            marginRight: "20px",
            marginLeft: "4px",
            marginBottom: "8px"
        }}>
            {selected}
            <button
                style={{...}}
                onClick={() => setSelected(null)}
            >x</button>
        </div>
    )
}

我真的不明白为什么它不起作用dish.taste返回给我“中”,dish.comment返回我 5,dish.trust给我 1。

我的下拉菜单和/或标签组件出了什么问题?


这里应该存在主要问题:

<Dropdown
  defaultValue={TASTE.find((t) => t.label === dish.taste)}
/>

使用此 defaultValue 属性,您只需在下拉列表呈现时设置该值一次。这菜品味道如果您通过异步请求检索其值,则此时无法定义。相反,您应该做的是添加一个 useEffect,仅在定义了ish.taste 值后才设置下拉列表的正确值。所以:

const [valueDropdown, setValueDropdown] = React.useState(null);

useEffect(() => { 
 // here you are running this useEffect each time the dish state changes
 if(dish?.taste){ //checks if taste exists
  setValueDropdown(TASTE.find((t) => t.label === dish.taste));
 }
}, [dish]);

现在,您应该传递两个新的 props,而不是传递给下拉列表 defaultValue:valuesetValue:

<Dropdown
  value={valueDropdown}
  setValue={setValueDropdown}
/>

最后,随着 props 的更改,您还应该在 Dropdown 组件内更新它们并删除该组件内的状态定义:

export default function CustomDropdown({
  style,
  options,
  styleSelect,
  value : selected,
  setValue : setSelected
}) {
// remove the line const [selected, setSelected] = useState(defaultValue);
....other logic
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反应选择的默认值,当我想发布具有空白页面输出的数据时,复选框不起作用 的相关文章

随机推荐

  • Bash:变量未正确扩展[重复]

    这个问题在这里已经有答案了 我正在尝试使用变量重命名文件 但是 当我将变量插入到文件名的开头时 事情没有按预期工作 情况如下 我有一个文件名测试 ls test 和一个变量i 1 将变量添加到文件名的末尾或中间时 它可以工作 mv test
  • 将字符串转换为日期,即将完成! [复制]

    这个问题在这里已经有答案了 可能的重复 将符合 ISO8601 的字符串转换为 java util Date 我正在尝试转换这个字符串 2011 06 07T14 08 59 697 07 00 对于 Java Date 到目前为止 我做了
  • CSS 边框样式:波浪

    我在 w3 org 上看到了这个文档 http www w3 org TR 2002 WD css3 border 20021107 borderstyles png显示 border style wave 属性 我急于尝试 在 Firef
  • 可以将一系列键映射到值的数据结构

    我试图找到一种数据结构 该结构从一系列值中获取特定值并将其映射到键 例如 我有以下条件 从1到2 9 我想把它映射到A 从4到6 我想将其映射到B 从6 5到10 我想将其映射到C 我的值为 5 我想将其映射到一个键 所以根据以上条件 我应
  • 使用 SnakeYaml 转储带引号的值

    有一个简单的 yml 文件test yml如下 color red 我按如下方式加载和转储文件 final DumperOptions yamlOptions new DumperOptions yamlOptions setDefault
  • Power Query:通过乘以另一列来转换列

    我想做类似的事情Power Query 根据另一列转换一列 但我陷入了如何修改语法以实现我的特定目标的困境 与链接的问题类似 假设我有下表 Table 1 Column A Column B Column C 1 4 7 2 5 8 3 6
  • 我可以在 Python 中多次等待同一个任务吗?

    我需要做很多工作 但幸运的是 很容易解耦到不同的任务中进行异步执行 其中一些是相互依赖的 我很清楚任务如何能够await其他多个人来获取他们的结果 但是 我不知道如何让多个不同的任务等待同一个协程 并且都得到结果 这文档据我所知也没有提到这
  • input 与 raw_input:Python 交互式 Shell 应用程序?

    我正在研究这个问题的答案 Python 交互式 Shell 类型应用程序 我的代码看起来像这样 def main while True s input gt if s hello print hi if s exit break if na
  • 将未知长度的切片中的值分配给 Go 中的结构体?

    我从github上的一些有用的包中找到了下面的案例 它看起来是如此丑陋和愚蠢 我认为更好的代码设计可以避免这种情况 但是如果遇到这种情况 是不是可以写得更简洁呢 有没有更好的方法来代替连续检查切片长度 package main type N
  • 真实设备产生过多日志

    我正在为 Android 开发一个简单的程序 我在真实设备 samsung young android 2 3 上进行了测试 我的程序会生成一些日志输出以用于调试目的 一切都很好 但我的设备开始在 Eclipse LogCat 窗口中生成大
  • hibernate中的cascade和inverse有什么区别,它们的用途是什么?

    如何在hibernate中使用级联和逆 定义它们的过程 标签是什么 它们彼此相关吗 它们有何用处 通过中间表建立多对多关系的情况 Cascade 表示是否将在子表中创建 更新记录 而 Inverse 表示是否会在中间表中创建 更新记录 例如
  • 如何使用非标准代码页读取 EBCDIC 数据,而不弄乱数字?

    这是给老手的 我正在从大型机 DB2 表中读取二进制转储 该表具有 varchar char smallint integer 和 float 列 有趣的是 DB2 使用代码页 424 希伯来语 我需要我的代码独立于代码页 因此 我使用 S
  • 如何在R中动态更改图表标题?

    这是一个使用的示例mtcars按变量分割成单独的图 我创建的是一个散点图vs and mpg通过将数据集拆分为cyl 首先创建一个空列表 然后我用了lapply循环遍历 cyl 4 6 8 的值 然后filter按该值的数据 之后 我绘制了
  • 如何在github上发布.php页面而不是.html来演示一些php内容?

    我正在看以下演示 http blueimp github com jQuery File Upload 据我在演示中的理解 php 文件是从 github 提供的 这意味着 php 内容可以从 github 提供 运行 我了解通过此链接从
  • iPhone - 为什么编译器在构建 ARM 架构时找不到某些包含内容?

    我正在尝试在 iPhone 项目中使用 C 库 我对 iPhone 开发非常陌生 我的图书馆 我已经奋斗了好几天 试图将此库构建成一个静态库 我可以将其用于模拟器 i386 和 ARM7 使用库的包含配置和 makefile 我可以毫无问题
  • 如何使用 Visual Studio 2015 为网站项目配置不同的虚拟目录

    我有一个在 VS 2012 中开发的 c 网站类型项目 我想使用 VS 2015 但无法指定与默认根目录 不同的虚拟目录 在 vs 2012 中 sln 文件中有以下几行 VWDPort 59903 VWDDynamicPort true
  • 使用正则表达式搜索元胞数组

    我经常发现自己尝试搜索元胞数组 就像我想使用 sql 查询搜索数据库一样 在这种情况下 我有许多军事基地 bases shp bases shaperead us military bases shp 然后我想过滤形状文件以获得空军基地 例
  • 使输入拇指比其他拇指更大

    这里的 React 开发人员试图通过编码来学习 这里我有一个滑块 我试图使拇指变大 但它不会比它所在的输入更大 正如你所看到的 如果我使拇指变大 它不会完全显示它 关于如何使它看起来像我想要的有什么建议吗 英语不是我的母语 所以可能会有错误
  • C#中如何获取变量的数据类型?

    如何找出某个变量保存的数据类型 例如 int string char 等 我现在有这样的事情 private static void Main var someone new Person Console WriteLine someone
  • 反应选择的默认值,当我想发布具有空白页面输出的数据时,复选框不起作用

    我无法将获取的数据作为默认值放入下拉列表 反应选择 和复选框中 我有显示的下拉菜单 好 但默认值dishId 1 is Medium 所以我应该看到在我的下拉列表中已经选择了Medium 但事实并非如此 评论的问题相同 export def