如何在动态数据上使用 secondaryText 配置 Material-UI 自动完成
How to configure Material-UI Autocomplete with secondaryText on dynamic data
我遇到了一个问题,我觉得缺少相关文档。
我正在构建一个站点,我在其中获取一个自动完成组件来搜索数据库中的数据,它工作正常,它获取数据,我已经构建了验证工作,一切正常。
如果我只使用一个文本在 MenuItem 上呈现它工作正常,比如显示一个名称 属性 我从数据库中获得,但如果我尝试将名称显示为主要文本和大小作为 SecondaryText,它根本不呈现自动完成的 menuItem 结果,即使被正确填充。
郑重声明,我正在努力实现这样的目标:https://cloud.githubusercontent.com/assets/9424409/17258323/33764c38-557b-11e6-808c-ac22287703d0.gif
但我只能让组件像这样工作:https://cloud.githubusercontent.com/assets/9424409/17258376/66015990-557b-11e6-8c12-9016da6e1f2e.gif
下面是代码,它只使用 textKey 来渲染我的数据:
this.dataSourceConfig = {text: 'textKey', value: 'valueKey', validationKey:'validationKey'};
this.state = {
dataSourceDrug:[{textKey: 'Text data goes here', valueKey: "", validationKey:'validation value goes here'}]}
render(){
return(
<AutoComplete
onNewRequest={this.onDrugNewRequest}
onUpdateInput={this.handleDrugUpdateInput}
searchText={this.state.valueDrug}
dataSource={this.state.dataSourceDrug}
dataSourceConfig={this.dataSourceConfig}
/>
)
}
那么我如何配置它来渲染主要和次要文本?
我已经检查了文档甚至 git 上的问题,但对我来说并没有说明什么:
http://www.material-ui.com/#/components/auto-complete
您必须像下面这样在数据源中配置辅助文本(Material UI 文档中的第二个示例):
import React from 'react';
import AutoComplete from 'material-ui/AutoComplete';
import MenuItem from 'material-ui/MenuItem';
const dataSource1 = [
{
text: 'text-value1',
value: (
<MenuItem
primaryText="text-value1"
secondaryText="☺"
/>
),
},
{
text: 'text-value2',
value: (
<MenuItem
primaryText="text-value2"
secondaryText="☺"
/>
),
},
];
好的,感谢@awzx 给我的答案,我找到了答案。
我正在使用 dataSourceConfig 和 dataSource,为了处理主要文本和次要文本,它不适用于 dataSourceConfig,所以我从我的组件中删除了该属性
dataSourceConfig={this.dataSourceConfig}
为了放置数据,我这样做了:
var updatedDataSource = [];
for (var i = 0; i < response.length; ++i)
{
var _name = response[i].name;
var _size = response[i].size;
var _val = <MenuItem primaryText={_name} secondaryText={_size}/>
updatedDataSource.push({text:response[i].name, value:(_val), valueKey:response[i].id, validationKey:'validation string here'});
}
this.setState({dataSourceDrug:updatedDataSource});
我遇到了一个问题,我觉得缺少相关文档。
我正在构建一个站点,我在其中获取一个自动完成组件来搜索数据库中的数据,它工作正常,它获取数据,我已经构建了验证工作,一切正常。
如果我只使用一个文本在 MenuItem 上呈现它工作正常,比如显示一个名称 属性 我从数据库中获得,但如果我尝试将名称显示为主要文本和大小作为 SecondaryText,它根本不呈现自动完成的 menuItem 结果,即使被正确填充。
郑重声明,我正在努力实现这样的目标:https://cloud.githubusercontent.com/assets/9424409/17258323/33764c38-557b-11e6-808c-ac22287703d0.gif
但我只能让组件像这样工作:https://cloud.githubusercontent.com/assets/9424409/17258376/66015990-557b-11e6-8c12-9016da6e1f2e.gif
下面是代码,它只使用 textKey 来渲染我的数据:
this.dataSourceConfig = {text: 'textKey', value: 'valueKey', validationKey:'validationKey'};
this.state = {
dataSourceDrug:[{textKey: 'Text data goes here', valueKey: "", validationKey:'validation value goes here'}]}
render(){
return(
<AutoComplete
onNewRequest={this.onDrugNewRequest}
onUpdateInput={this.handleDrugUpdateInput}
searchText={this.state.valueDrug}
dataSource={this.state.dataSourceDrug}
dataSourceConfig={this.dataSourceConfig}
/>
)
}
那么我如何配置它来渲染主要和次要文本?
我已经检查了文档甚至 git 上的问题,但对我来说并没有说明什么:
http://www.material-ui.com/#/components/auto-complete
您必须像下面这样在数据源中配置辅助文本(Material UI 文档中的第二个示例):
import React from 'react';
import AutoComplete from 'material-ui/AutoComplete';
import MenuItem from 'material-ui/MenuItem';
const dataSource1 = [
{
text: 'text-value1',
value: (
<MenuItem
primaryText="text-value1"
secondaryText="☺"
/>
),
},
{
text: 'text-value2',
value: (
<MenuItem
primaryText="text-value2"
secondaryText="☺"
/>
),
},
];
好的,感谢@awzx 给我的答案,我找到了答案。
我正在使用 dataSourceConfig 和 dataSource,为了处理主要文本和次要文本,它不适用于 dataSourceConfig,所以我从我的组件中删除了该属性
dataSourceConfig={this.dataSourceConfig}
为了放置数据,我这样做了:
var updatedDataSource = [];
for (var i = 0; i < response.length; ++i)
{
var _name = response[i].name;
var _size = response[i].size;
var _val = <MenuItem primaryText={_name} secondaryText={_size}/>
updatedDataSource.push({text:response[i].name, value:(_val), valueKey:response[i].id, validationKey:'validation string here'});
}
this.setState({dataSourceDrug:updatedDataSource});