You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Inquirer中'List'与'Rawlist'两种类型的区别是什么?

Inquirer list vs rawlist: 差异解析及使用指南

嘿,我来帮你把Inquirer里这两个列表组件的区别掰明白,毕竟官方文档的描述确实有点干巴巴的😂

核心差异:交互与外观

这俩最直观的区别在于用户选择的方式选项的展示形式

  • list 组件
    • 选项前面显示无序列表符号(比如
    • 用户只能通过上下箭头(↑↓)切换选中项,按回车确认
    • 适合选项数量不多的场景,交互更偏向“直观选择式”
  • rawlist 组件
    • 每个选项前会带数字编号(比如1. MacBook Pro2. iPhone 15
    • 用户既可以用箭头切换,也能直接输入选项对应的数字快速选中
    • 适合选项数量较多的场景,用户不用反复按箭头翻找,输入数字效率更高

default 属性的关键区别

这也是官方文档提到的重点,实际使用时很容易踩坑:

  • listdefault:支持两种设置方式——可以是选项数组的索引值(比如1对应第二个选项),也可以是选项的实际值(比如产品数组里的'iPhone 15'),Inquirer会自动匹配对应选项。
  • rawlistdefault:只能设置选项数组的索引值,不能用选项值。比如默认想选第二个产品,只能写default: 1,写default: 'iPhone 15'会直接失效。

结合你的产品数组场景的示例

假设从SQL返回的产品数组是:

const productsFromSQL = ['MacBook Pro', 'iPhone 15', 'iPad Air'];

使用 list 的配置

const inquirer = require('inquirer');

inquirer.prompt([
  {
    type: 'list',
    name: 'selectedProduct',
    message: '请选择一个产品:',
    choices: productsFromSQL,
    default: 'iPhone 15' // 直接用选项值,有效
    // 也可以写 default: 1,用索引设置默认项,同样有效
  }
]).then(answers => {
  console.log('你选了:', answers.selectedProduct);
});

使用 rawlist 的配置

const inquirer = require('inquirer');

inquirer.prompt([
  {
    type: 'rawlist',
    name: 'selectedProduct',
    message: '请选择一个产品(输入数字或用箭头):',
    choices: productsFromSQL,
    default: 1 // 只能用索引,对应第二个选项iPhone 15,写值会无效
  }
]).then(answers => {
  console.log('你选了:', answers.selectedProduct);
});

场景选择建议

  • 如果产品数量少(5个以内),用list更友好,用户不用记数字,直接选就行
  • 如果产品数量多(10个以上),rawlist更高效,用户输数字就能快速定位目标选项

内容的提问来源于stack exchange,提问作者J.Whittington

火山引擎 最新活动