[英]How to avoid arrow function while passing prop values to another component?
**ApplicatorType Stateful Component**
class ApplicatorType extends Component {
public state = {
applicatorTypes: ['Carpenter', 'Painter', 'Plumber'],
applicatorTypesSelected: [],
}
public render() {
allotedTypes = (
<DisplayTypes
applicatorTypes={this.state.applicatorTypes}
changed={this.typeCheckedHandler}
checkedType={this.state.applicatorTypesSelected}
/>
);
return <div> {allotedTypes} </div>
}
private typeCheckedHandler =
(event: React.ChangeEvent, selected: string) => {
const index = this.state.applicatorTypesSelected.indexOf(selected);
if (index < 0) {
this.state.applicatorTypesSelected.push(selected);
} else {
this.state.applicatorTypesSelected.splice(index, 1);
}
this.setState({
applicatorTypesSelected:[...this.state.applicatorTypesSelected]
});
};
}
**DisplayTypes Stateless Component**
import * as React from 'react';
import Checkbox from '../../UI/Checkbox/Checkbox';
const displayTypes: React.SFC<any> =
({applicatorTypes, changed, checkedType}) =>
applicatorTypes.map((element: string, index: number) => {
return
(<Checkbox
key={index}
changed={(event: React.ChangeEvent) => changed(event, element)}
checkedType={checkedType.some((x: string) => x === element)}
element={element}
/>);
})
export default displayTypes;
**Checkbox stateless component**
const checkbox: React.SFC<any> = ({ element, changed, checkedType}) =>
{
return (
<div>
<input
name={element}
className="checkbox"
type="checkbox"
onChange={changed}
checked={checkedType}
/>{' '}
<label onClick={changed}>{element}</label>
</div>
);
};
export default checkbox;
In the above DisplayTypes Component, here,在上面的 DisplayTypes 组件中,这里,
changed={(event: React.ChangeEvent) => changed(event, element)}
checkedType={checkedType.some((x: string) => x === element)}
the recommended way is to avoid arrow functions.推荐的方法是避免箭头函数。 However, I could not make it work without arrow functions.
但是,如果没有箭头函数,我无法让它工作。 Is there a better way to achieve the same functionality without arrow functions?
有没有更好的方法可以在没有箭头函数的情况下实现相同的功能?
Right now, I am using "jsx-no-lambda": false in tslint.json and the code is working perfectly fine.现在,我在 tslint.json 中使用 "jsx-no-lambda": false 并且代码运行良好。
You can make the following changes to avoid lambda functions您可以进行以下更改以避免使用 lambda 函数
private typeCheckedHandler =
(selected: string, event: React.ChangeEvent,) => {
...
...
};
And change the component as:并将组件更改为:
const DisplayTypes =
({ applicatorTypes, changed, checkedType }) => {
return applicatorTypes.map((element, index) => {
let list = checkedType.some((x: string) => x === element);
return (<Checkbox
key={index}
changed={changed.bind({}, element)}
checkedType={list}
element={element}
/>);
})
}
Feel free to post comment in case of need.如有需要,请随时发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.