Skip to content

Commit 9619d85

Browse files
Satyamjavivelasco
authored andcommitted
* Fixes react-toolbox#1452 Avoid using .bind within the render method of components. * Fixed JS comment into proper JSX comment
1 parent f90958d commit 9619d85

File tree

3 files changed

+25
-23
lines changed

3 files changed

+25
-23
lines changed

components/input/readme.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ import Input from 'react-toolbox/lib/input';
99
class InputTest extends React.Component {
1010
state = { name: '', phone: '', email: '', hint: '' };
1111

12-
handleChange = (name, value) => {
13-
this.setState({ [name]: value });
12+
handleChange = (value, ev) => {
13+
this.setState({ [ev.target.name]: value });
1414
};
1515

1616
render () {
1717
return (
1818
<section>
19-
<Input type='text' label='Name' name='name' value={this.state.name} onChange={this.handleChange.bind(this, 'name')} maxLength={16 } />
19+
<Input type='text' label='Name' name='name' value={this.state.name} onChange={this.handleChange} maxLength={16 } />
2020
<Input type='text' label='Disabled field' disabled />
21-
<Input type='email' label='Email address' icon='email' value={this.state.email} onChange={this.handleChange.bind(this, 'email')} />
22-
<Input type='tel' label='Phone' name='phone' icon='phone' value={this.state.phone} onChange={this.handleChange.bind(this, 'phone')} />
23-
<Input type='text' value={this.state.hint} label='Required Field' hint='With Hint' required onChange={this.handleChange.bind(this, 'hint')} icon={<span>J</span>} />
21+
<Input type='email' label='Email address' name='email' icon='email' value={this.state.email} onChange={this.handleChange} />
22+
<Input type='tel' label='Phone' name='phone' icon='phone' value={this.state.phone} onChange={this.handleChange} />
23+
<Input type='text' label='Required Field' name='hint' hint='With Hint' required value={this.state.hint} onChange={this.handleChange} icon={<span>J</span>} />
2424
</section>
2525
);
2626
}

docs/app/components/layout/main/modules/examples/input_example_1.txt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
class InputTest extends React.Component {
22
state = { name: '', phone: '', multiline: '', email: '', hint: '', label: '' };
33

4-
handleChange = (name, value) => {
5-
this.setState({...this.state, [name]: value});
4+
handleChange = (value, ev) => {
5+
this.setState({[ev.target.name]: value});
66
};
77

88
render () {
99
return (
1010
<section>
11-
<Input type='text' label='Name' name='name' value={this.state.name} onChange={this.handleChange.bind(this, 'name')} maxLength={16} />
12-
<Input type='text' hint='With Hint, no label' name='name' value={this.state.label} onChange={this.handleChange.bind(this, 'label')} maxLength={16} />
11+
<Input type='text' label='Name' name='name' value={this.state.name} onChange={this.handleChange} maxLength={16} />
12+
<Input type='text' hint='With Hint, no label' name='label' value={this.state.label} onChange={this.handleChange} maxLength={16} />
1313
<Input type='text' label='Disabled field' disabled />
14-
<Input type='text' multiline label='Multiline' maxLength={20} value={this.state.multiline} onChange={this.handleChange.bind(this, 'multiline')} />
15-
<Input type='email' label='Email address' icon='email' value={this.state.email} onChange={this.handleChange.bind(this, 'email')} />
16-
<Input type='tel' label='Phone' name='phone' icon='phone' value={this.state.phone} onChange={this.handleChange.bind(this, 'phone')} />
17-
<Input type='text' value={this.state.hint} label='Required Field' hint='With Hint' required onChange={this.handleChange.bind(this, 'hint')} icon='share' />
14+
<Input type='text' multiline label='Multiline' name='multiline' maxLength={20} value={this.state.multiline} onChange={this.handleChange} />
15+
<Input type='email' label='Email address' name='email' icon='email' value={this.state.email} onChange={this.handleChange} />
16+
<Input type='tel' label='Phone' name='phone' icon='phone' value={this.state.phone} onChange={this.handleChange} />
17+
<Input type='text' name='hint' value={this.state.hint} label='Required Field' hint='With Hint' required onChange={this.handleChange} icon='share' />
18+
{/* Just an example. Defining functions in a property, such as onClick, is a bad idea: */}
1819
<Input type='text' label='error' error={<span>Error!! <a href="#!" onClick={e => { e.preventDefault(); console.log('some help'); }}>?</a></span>} />
1920
</section>
2021
);

spec/components/input.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ class InputTest extends React.Component {
1212
multilineRows: 'A\n\B\nC\nD\nE\nF',
1313
};
1414

15-
handleChange = (name, value) => {
16-
this.setState({ ...this.state, [name]: value });
15+
handleChange = (value, ev) => {
16+
this.setState({[ev.target.name]: value });
1717
};
1818

1919
render() {
@@ -23,18 +23,19 @@ class InputTest extends React.Component {
2323
<p>lorem ipsum...</p>
2424
<Input
2525
type="text"
26+
name="normal"
2627
value={this.state.normal}
27-
label="First Name" onChange={this.handleChange.bind(this, 'normal')}
28+
label="First Name" onChange={this.handleChange}
2829
maxLength={12}
2930
/>
30-
<Input type="email" value={this.state.fixedLabel} label="Label fixed" floating={false} onChange={this.handleChange.bind(this, 'fixedLabel')} />
31+
<Input type="email" name="fixedLabel" value={this.state.fixedLabel} label="Label fixed" floating={false} onChange={this.handleChange} />
3132
<Input type="text" value="Read only" readOnly label="Phone Number" />
32-
<Input type="email" value={this.state.multilineHint} label="Description" hint="Enter Description" multiline onChange={this.handleChange.bind(this, 'multilineHint')} />
33-
<Input type="text" value={this.state.multilineRows} label="Row Limited Description" hint="Enter Description" multiline rows={4} onChange={this.handleChange.bind(this, 'multilineRows')} />
33+
<Input type="email" name="multilineHint" multilineHint value={this.state.multilineHint} label="Description" hint="Enter Description" multiline onChange={this.handleChange} />
34+
<Input type="text" name="multilineRows" value={this.state.multilineRows} label="Row Limited Description" hint="Enter Description" multiline rows={4} onChange={this.handleChange} />
3435
<Input type="text" label="Disabled field" disabled />
35-
<Input type="tel" value={this.state.withIcon} required label="With icon" onChange={this.handleChange.bind(this, 'withIcon')} icon="phone" />
36-
<Input type="tel" value={this.state.withCustomIcon} label="With custom icon" onChange={this.handleChange.bind(this, 'withCustomIcon')} icon="favorite" />
37-
<Input type="text" value={this.state.withHintCustomIcon} label="With Hint Text Icon" hint="Hint Text" onChange={this.handleChange.bind(this, 'withHintCustomIcon')} icon="share" />
36+
<Input type="tel" name="withIcon" value={this.state.withIcon} required label="With icon" onChange={this.handleChange} icon="phone" />
37+
<Input type="tel" name="withCustomIcon" value={this.state.withCustomIcon} label="With custom icon" onChange={this.handleChange} icon="favorite" />
38+
<Input type="text" name="withHintCustomIcon" value={this.state.withHintCustomIcon} label="With Hint Text Icon" hint="Hint Text" onChange={this.handleChange} icon="share" />
3839
</section>
3940
);
4041
}

0 commit comments

Comments
 (0)