- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在关注this在我的应用程序中实现 MUI 选择字段的示例。我可以让代码为我工作,但我有一些问题。它不允许我取消选择我选择的值。另外,如果该值不在渲染列表中,我还希望能够通过输入来添加新值。这可能吗?
这是我的代码:
export class FormPage extends React.Component {
constructor() {
super();
this.state = {'resource': '', 'catvalues': '', 'subcatvalues': '', 'prodvalues': '', 'solutionValues': '', 'nsocValues': '', 'statusValues': ''};
this.selectionRenderer1 = this.selectionRenderer1.bind(this);
this.selectionRenderer2 = this.selectionRenderer2.bind(this);
this.selectionRenderer3 = this.selectionRenderer3.bind(this);
this.selectionRenderer4 = this.selectionRenderer4.bind(this);
this.selectionRenderer5 = this.selectionRenderer5.bind(this);
this.selectionRenderer6 = this.selectionRenderer6.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
this.addResource = this.addResource.bind(this);
}
handleChange1 = (event, key, catvalues) => {
this.setState({catvalues});
};
selectionRenderer1 = catvalues => {
// change the default comma separated rendering
return (
<span style={{color: '#ff4081'}}>
{catvalues.join('; ')}
</span>
).bind(this);
};
menuItems1(catvalues) {
return categorylist.map(cl => (
<MenuItem
key={cl}
insetChildren
checked={catvalues.includes(cl)}
value={cl}
primaryText={cl}
/>
));
}
handleChange2 = (event, key, subcatvalues) => {
this.setState({subcatvalues});
};
selectionRenderer2 = subcatvalues => {
// change the default comma separated rendering
return (
<span style={{color: '#ff4081'}}>
{subcatvalues.join('; ')}
</span>
);
};
menuItems2(subcatvalues) {
return subcategorylist.map(scl => (
<MenuItem
key={scl}
insetChildren
checked={subcatvalues.includes(scl)}
value={scl}
primaryText={scl}
/>
));
}
handleChange3 = (event, key, prodvalues) => {
this.setState({prodvalues});
};
selectionRenderer3 = prodvalues => {
// change the default comma separated rendering
return (
<span style={{color: '#ff4081'}}>
{prodvalues.join('; ')}
</span>
).bind(this);
};
menuItems3(prodvalues) {
return prodlist.map(pl => (
<MenuItem
key={pl}
insetChildren
checked={prodvalues.includes(pl)}
value={pl}
primaryText={pl}
/>
));
}
handleChange4 = (event, key, solutionValues) => {
this.setState({solutionValues});
};
selectionRenderer4 = solutionValues => {
// change the default comma separated rendering
return (
<span style={{color: '#ff4081'}}>
{solutionValues.join('; ')}
</span>
).bind(this);
};
menuItems4(solutionValues) {
return solutionList.map(sl => (
<MenuItem
key={sl}
insetChildren
checked={solutionValues.includes(sl)}
value={sl}
primaryText={sl}
/>
));
}
handleChange5 = (event, key, nsocValues) => {
this.setState({nsocValues});
};
selectionRenderer5 = nsocValues => {
// change the default comma separated rendering
return (
<span style={{color: '#ff4081'}}>
{nsocValues.join('; ')}
</span>
).bind(this);
};
menuItems5(nsocValues) {
return nsocList.map(nl => (
<MenuItem
key={nl}
insetChildren
checked={nsocValues.includes(nl)}
value={nl}
primaryText={nl}
/>
));
}
handleChange6 = (event, key, statusValues) => {
this.setState({statusValues});
};
selectionRenderer6 = statusValues => {
// change the default comma separated rendering
return (
<span style={{color: '#ff4081'}}>
{statusValues.join('; ')}
</span>
).bind(this);
};
menuItems6(statusValues) {
return statusList.map(sll => (
<MenuItem
key={sll}
insetChildren
checked={statusValues.includes(sll)}
value={sll}
primaryText={sll}
/>
));
}
addResource(resource) {
console.log('Adding resource:', resource);
$.ajax({
type: 'POST', url: '/api/resources', contentType: 'application/json',
data: JSON.stringify(resource),
success: function(data) {
console.log(data);
browserHistory.push('/home');
}.bind(this),
error: function(xhr, status, err) {
// ideally, show error to user.
console.log('Error adding resource:', err);
}
});
}
handleSubmit(e) {
e.preventDefault();
var form = document.forms.resourceAdd;
this.addResource({
category: form.category.value,
subcategory: form.subcategory.value,
product: form.product.value,
solution: form.solution.value,
weight: form.weight.value,
nsoc: form.nsoc.value,
status: form.status.value,
date_product_added: form.date_product_added.value,
design_status: form.design_status.value,
design_combined: form.design_combined.value,
implement_status: form.implement_status.value,
implement_combined: form.implement_combined.value,
operate_status: form.operate_status.value,
operate_combined: form.operate_combined.value});
// clear the form for the next input
form.category.value = ''; form.subcategory.value = ''; form.product.value = ''; form.solution.value = ''; form.weight.value = ''; form.nsoc.value = ''; form.status.value = '';form.date_product_added.value = '';
form.design_status.value = ''; form.design_combined.value = ''; form.implement_status.value = ''; form.implement_combined.value = ''; form.operate_status.value = ''; form.operate_combined.value = '';
}
render() {
const {catvalues} = this.state;
const floatingLabelText1 = 'Categories' +
(catvalues.length > 1 ? ` (${catvalues.length})` : '');
const {subcatvalues} = this.state;
const floatingLabelText2 = 'Sub Categories' +
(subcatvalues.length > 1 ? ` (${subcatvalues.length})` : '');
const {prodvalues} = this.state;
const floatingLabelText3 = 'Products' +
(prodvalues.length > 1 ? ` (${prodvalues.length})` : '');
const {solutionValues} = this.state;
const floatingLabelText4 = 'Solutions' +
(solutionValues.length > 1 ? ` (${solutionValues.length})` : '');
const {nsocValues} = this.state;
const floatingLabelText5 = 'NSOC' +
(nsocValues.length > 1 ? ` (${nsocValues.length})` : '');
const {statusValues} = this.state;
const floatingLabelText6 = 'Status' +
(statusValues.length > 1 ? ` (${statusValues.length})` : '');
return (
<PageBase title="Form Page"
navigation="Application / Form Page">
<form>
<SelectField
multiple
floatingLabelText={floatingLabelText1}
fullwidth={true}
value={catvalues}
onChange={this.handleChange1}
selectionRenderer={this.selectionRenderer1}
>
{this.menuItems1(catvalues)}
</SelectField>
<SelectField
multiple
floatingLabelText={floatingLabelText2}
fullwidth
value={subcatvalues}
onChange={this.handleChange2}
selectionRenderer={this.selectionRenderer2}
>
{this.menuItems2(subcatvalues)}
</SelectField>
<SelectField
multiple
floatingLabelText={floatingLabelText3}
fullwidth
value={prodvalues}
onChange={this.handleChange3}
selectionRenderer={this.selectionRenderer3}
>
{this.menuItems3(prodvalues)}
</SelectField>
<SelectField
multiple
floatingLabelText={floatingLabelText4}
fullwidth
value={solutionValues}
onChange={this.handleChange4}
selectionRenderer={this.selectionRenderer4}
>
{this.menuItems4(solutionValues)}
</SelectField>
<TextField
hintText="Weight"
floatingLabelText="Weight"
fullWidth
/>
<SelectField
multiple
floatingLabelText={floatingLabelText5}
fullwidth
value={nsocValues}
onChange={this.handleChange5}
selectionRenderer={this.selectionRenderer5}
>
{this.menuItems5(nsocValues)}
</SelectField>
<SelectField
multiple
floatingLabelText={floatingLabelText6}
fullwidth
value={statusValues}
onChange={this.handleChange6}
selectionRenderer={this.selectionRenderer6}
>
{this.menuItems6(statusValues)}
</SelectField>
<DatePicker
hintText="Date Product Added"
floatingLabelText="date_product_added"
fullWidth/>
<TextField
hintText="Design Status"
floatingLabelText="design_status"
fullWidth
/>
<TextField
hintText="Design Players"
floatingLabelText="design_combined"
fullWidth
/>
<TextField
hintText="Implement Status"
floatingLabelText="implement_status"
fullWidth
/>
<TextField
hintText="Implement Players"
floatingLabelText="implement_combined"
fullWidth
/>
<TextField
hintText="Operate Status"
floatingLabelText="operate_status"
fullWidth
/>
<TextField
hintText="Operate Players"
floatingLabelText="operate_players"
fullWidth
/>
<Divider/>
<div style={styles.buttons}>
<Link to="/">
<RaisedButton label="Cancel"/>
</Link>
<RaisedButton label="Save"
style={styles.saveButton}
type="submit"
onClick={this.handleSubmit.bind(this)}
primary/>
</div>
</form>
</PageBase>
);
}
}
export default FormPage;
最佳答案
我建议您根据发送到组件的事件来定位不同的行为(单击事件触发正常行为,双击切换到将名称添加到集合中的输入),或者在之前或之后添加第二个组件您的选择执行相同的操作(就像按钮组一样,前或后按钮触发开关)。
然后,您可以使用当前状态
在render
中渲染的组件之间进行切换。
你的组件对我来说看起来有点大。我会尝试将其分解为子组件(编号的事件处理程序尤其看起来像是子组件的 Prop )。
编辑
See this CodePen .
它是我使用 Foundation 6 编写的前一个示例的分支。不过,同样的原则也适用于 Material-UI,因为它的要点涉及 ReactJS。
听双击选择输入不起作用:p。我添加了一个更改组件状态的按钮。父组件的 render 方法会打开该状态并相应地渲染不同的输入。
我使用这个技巧在其他项目上根据用户的权限在只读字段和输入字段之间切换。双击非常适合该用例,并带来 super 用户体验。
...
switchComponent(){
this.setState({
inputShown : !this.state.inputShown
});
}
render() {
const children = this.state.inputShown ?
(<Input label="Add: " id="input1" onChange={this.inputChanged} className="columns small-4" />)
:
(<Select label="Choose: " id="select1" onChange={this.selectChanged} className="columns small-4">
{this.state.options.map((o,i) => <Option key={i} label={o} defaultValue={o}/>)}
</Select>)
return <div>
<div className="row">
<a className="button primary columns small-1" onClick={this.switchComponent}>Switch</a>
{children}
</div>
</div>;
}
...
注意 CSS 根本没有调整,它是基础 6。不过,您可以绑定(bind)使用 CSS 轻松地选择/输入。
关于javascript - React Material UI 取消选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45816027/
问题是,当用户回复彼此的帖子时,我必须这样做: margin-left:40px; 对于 1 级深度 react margin-left:80px; 对于 2 层深等 但是我想让 react div
我试图弄清楚如何将 React Router 与 React VR 连接起来。 首先,我应该使用 react-router dom/native ?目前尚不清楚,因为 React VR 构建在 Rea
我是 React 或一般编码背景的新手。我不确定这些陈述之间有什么区别 import * as react from 'react' 和 import react from 'react' 提前致谢!
我正在使用最新的稳定版本的 react、react-native、react-test-renderer、react-dom。 然而,react-native 依赖于 react@16.0.0-alp
是否 react 原生 应用程序开发可以通过软件架构实现,例如 MVC、MVP、MVVM ? 谢谢你。 最佳答案 是的。 React Native 只是你提到的那些软件设计模式中的“V”。如果你考虑其
您好我正在尝试在我的导航器右按钮中绑定(bind)一个功能, 但它给出了错误。 这是我的代码: import React, { Component } from 'react'; import Ico
我使用react native创建了一个应用程序,我正在尝试生成apk。在http://facebook.github.io/react-native/docs/signed-apk-android.
1 [我尝试将分页的 z-index 更改为 0,但没有成功] 这是我的codesandbox的链接:请检查最后一个选择下拉列表,它位于分页后面。 https://codesandbox.io/s/j
我注意到 React 可以这样导入: import * as React from 'react'; ...或者像这样: import React from 'react'; 第一个导入 react
我是 react-native 的新手。我正在使用 React Native Paper 为所有屏幕提供主题。我也在使用 react 导航堆栈导航器和抽屉导航器。首先,对于导航,论文主题在导航组件中不
我有一个使用 Ignite CLI 创建的 React Native 应用程序.我正在尝试将 TabNavigator 与 React Navigation 结合使用,但我似乎无法弄清楚如何将数据从一
我正在尝试在我的 React 应用程序中进行快照测试。我已经在使用 react-testing-library 进行一般的单元测试。然而,对于快照测试,我在网上看到了不同的方法,要么使用 react-
我正在使用 react-native 构建跨平台 native 应用程序,并使用 react-navigation 在屏幕之间导航和使用 redux 管理导航状态。当我嵌套导航器时会出现问题。 例如,
由于分页和 React Native Navigation,我面临着一种复杂的问题。 单击具有类别列表的抽屉,它们都将转到屏幕 问题陈述: 当我随机点击类别时,一切正常。但是,在分页过程中遇到问题。假
这是我的抽屉导航: const DashboardStack = StackNavigator({ Dashboard: { screen: Dashboard
尝试构建 react-native android 应用程序但出现以下错误 info Running jetifier to migrate libraries to AndroidX. You ca
我目前正在一个应用程序中实现 React Router v.4,我也在其中使用 Webpack 进行捆绑。在我的 webpack 配置中,我将 React、ReactDOM 和 React-route
我正在使用 React.children 渲染一些带有 react router 的子路由(对于某个主路由下的所有子路由。 这对我来说一直很好,但是我之前正在解构传递给 children 的 Prop
当我运行 React 应用程序时,它显示 export 'React'(导入为 'React')在 'react' 中找不到。所有页面错误 see image here . 最佳答案 根据图像中的错误
当我使用这个例子在我的应用程序上实现 Image-slider 时,我遇到了这个错误。 import React,{Component} from 'react' import {View,T
我是一名优秀的程序员,十分优秀!