2017-03-16 85 views
0

如何使用作出反应JS

import React, { Component } from 'react'; 
 
import { Link } from 'react-router' 
 
import { Dropdown, DropdownMenu, DropdownItem, Progress } from 'reactstrap'; 
 
import Session from 'redux-react-session'; 
 
import BeaconSettings from '../BeaconSettings'; 
 
class NewBeacon extends Component { 
 
    constructor(props) { 
 
    super(props); 
 
    this.state = {inputname: '', 
 
    inputdescription: '' , 
 
    inputzone: '' , 
 
    inputstore: '' , 
 
    inputfloor: ''}; 
 
    this.handleName = this.handleName.bind(this); 
 
    this.handleDescription = this.handleDescription.bind(this); 
 
    this.handleZone = this.handleZone.bind(this); 
 
    this.handleStore = this.handleStore.bind(this); 
 
    this.handleFloor = this.handleFloor.bind(this); 
 
    this.handleSubmit = this.handleSubmit.bind(this); 
 
    // alert("hey"); 
 
    this.toggleStore = this.toggleStore.bind(this); 
 
    this.toggleFloor = this.toggleFloor.bind(this); 
 
    this.toggleZone = this.toggleZone.bind(this); 
 
    this.state = { 
 
     dropdownZone: false 
 
    }; 
 
    this.state ={ 
 
     dropdownStore: false 
 
    }; 
 
    this.state ={ 
 
     dropdownFloor: false 
 
    }; 
 
    this.state = { 
 
      data:[ 
 
       {name:"Nikko Laus1"}, 
 
       {name:"Sam Collins"}, 
 
       {name:"Carl Smith Wesson"} 
 
      ], 
 
      store:[ 
 
       {name:"abcd"}, 
 
       {name:"Sam Collins"}, 
 
       {name:"Carl Smith Wesson"} 
 
      ], 
 
      floor:[ 
 
       {name:"Ist"}, 
 
       {name:"IInd"}, 
 
       {name:"IIIrd"} 
 
      ] 
 
     }; 
 

 
    } 
 
static contextTypes = { 
 
    router: React.PropTypes.object.isRequired 
 
} 
 
handleSubmit(event){ 
 

 
    alert('Submitted: ' + this.state.inputname + this.state.inputdescription + this.state.inputzone + this.state.inputstore + this.state.inputfloor); 
 
    event.preventDefault(); 
 
    this.context.router.push('/components/BeaconSettings'); 
 
    } 
 
    toggleZone() { 
 
    this.setState({ 
 
     dropdownZone: !this.state.dropdownZone 
 
    }); 
 
    } 
 
    toggleStore() { 
 
    this.setState({ 
 
     dropdownStore: !this.state.dropdownStore 
 
    }); 
 
    } 
 
    toggleFloor() { 
 
    this.setState({ 
 
     dropdownFloor: !this.state.dropdownFloor 
 
    }); 
 
    } 
 

 
    handleName(event) { 
 

 
    this.setState({inputname: event.target.value}); 
 
    } 
 
    handleDescription(event){ 
 
    this.setState({inputdescription: event.target.value}); 
 
    } 
 
    handleZone(event){ 
 
    this.setState({inputzone: event.target.value}); 
 
    } 
 
    handleFloor(event){ 
 
     this.setState({inputfloor: event.target.value}); 
 
    } 
 
    handleStore(event){ 
 
     this.setState({inputstore: event.target.value}); 
 
    } 
 
    
 

 

 
    render() { 
 
    let Zone = this.state.data.map(person => 
 
     { 
 
      return <DropElement key={person.id} data={person}/> 
 
     }); 
 

 
    let Store = this.state.store.map(person => 
 
    { 
 
     return <DropElement key={person.id} data={person}/> 
 
    }); 
 
    let Floor = this.state.floor.map(person => 
 
    { 
 
     return <DropElement key={person.id} data={person}/> 
 
    }); 
 
    return (<div><div> 
 
      <div className="animated fadeIn"> 
 
      <br /><div className="card" style={{ width: 77 + '%' }}> 
 
       <div className="card-header"> 
 
       Create Beacon 
 
       </div> 
 
       <div className="card-block"> 
 
       <div className="input-group mb-1"> 
 
        <span className="input-group-addon"><i className="icon-user"></i></span> 
 
        <input type="text" className="form-control" value={this.state.inputname} onChange={this.handleName} placeholder="Name" /> 
 
       </div> 
 

 
       <div className="input-group mb-1"> 
 
        <span className="input-group-addon"><i className="fa fa-align-justify"></i></span> 
 
        <input type="textArea" value={this.state.inputdescription} onChange={this.handleDescription} className="form-control" placeholder="Description"/> 
 
       </div> 
 
       <div className="card-header"> 
 
       Select a zone</div> 
 
       <div className="card-block"><div className="px-1 row">Zone: 
 
       <div className="px-2 mb-1"> 
 
       
 
       <Dropdown isOpen={this.state.dropdownZone} toggle={this.toggleZone}> 
 
        <input type="text" value={this.state.inputzone} onChange={this.handleZone} className="caret" placeholder="Select a Zone" 
 
        onClick={this.toggleZone} data-toggle="dropdown" aria-haspopup="true" aria-expanded={this.state.dropdownZone} /> 
 
         
 
        <DropdownMenu> 
 

 
         <DropdownItem>{Zone}<divider /></DropdownItem> 
 
         
 
        </DropdownMenu> 
 
        </Dropdown></div></div></div> 
 

 
        <div className="card-header"> 
 
       Select a Store</div> 
 
       <div className="card-block"><div className="px-1 row">Store: 
 
       <div className=" px-2 mb-1"> 
 
       
 
        <Dropdown isOpen={this.state.dropdownStore} toggle={this.toggleStore}> 
 
        <input type="text" value={this.state.inputstore} onChange={this.handleStore} className="caret" placeholder="Select a Store" 
 
        onClick={this.toggleStore} data-toggle="dropdown" aria-haspopup="true" aria-expanded={this.state.dropdownStore} /> 
 
         
 
        <DropdownMenu> 
 

 
         <DropdownItem>{Store}<divider /></DropdownItem> 
 
         
 
        </DropdownMenu> 
 
        </Dropdown> 
 

 
       </div></div></div> 
 
        <div className="card-header"> 
 
       Select a floor</div> 
 
       <div className="card-block"><div className="px-1 row">Floor: 
 
       <div className=" px-2 mb-1"> 
 

 
        <Dropdown isOpen={this.state.dropdownFloor} toggled={this.toggleFloor}> 
 
        <input type="text" value={this.state.inputfloor} onChange={this.handleFloor} placeholder="Select a Floor" 
 
        onClick={this.toggleFloor} data-toggled="dropdown" aria-haspopup="true" aria-expanded={this.state.dropdownFloor} /> 
 
         
 
        <DropdownMenu> 
 

 
         <DropdownItem>{Floor}<divider /></DropdownItem> 
 
         
 
        </DropdownMenu> 
 
        </Dropdown></div></div></div> 
 

 

 
        </div> 
 
       
 
       </div> 
 
       
 
       </div> 
 
      </div> 
 
      
 
      <div className="px-2 row" style={{ width: 90 + '%' }}> 
 
      <div><button className="nav-link btn btn-block btn-success" onClick={this.handleSubmit} activeClassName="active"> 
 
       Next</button> 
 
       </div><div className="px-2"><Link to={'/components/social-buttons'} className="nav-link btn btn-block btn-danger" activeClassName="active"> Cancel</Link> 
 
</div> 
 
<div className="float-right"><Link to={'/components/social-buttons'} className="nav-link btn btn-block btn-success" activeClassName="active"> 
 
Default Notification 
 
</Link></div> 
 
</div></div> 
 
     
 
     
 
     
 
     
 
    ) 
 
    } 
 
} 
 

 
class DropElement extends React.Component 
 
{ 
 
    constructor() 
 
    { 
 
     super(); 
 
    } 
 

 
    render() 
 
    { 
 
     return (<DropdownItem>{this.props.data.name} 
 
        </DropdownItem> 
 
      ); 
 
    } 
 
} 
 

 
export default NewBeacon;

插入一个下拉这里是我的代码,我想使用阵营JS 我试图插入一个下拉列表,这样做,但是这不是正确的方式还是这不是运用下拉 方式,使如何处理这一点,我想,动态,我使用阵列

回答

1

做如何不需要为每一个Dropdowntype个别处理函数,而不是传递一个标识符到的onChange函数为你做这份工作。另外可以构建你的构造函数,你应该在一个this.state广告中定义所有状态变量,而不是创建多个状态变量。我希望这可以帮助

import React, { Component } from 'react'; 
import { Link } from 'react-router' 
import { Dropdown, DropdownMenu, DropdownItem, Progress } from 'reactstrap'; 
import Session from 'redux-react-session'; 
import BeaconSettings from '../BeaconSettings'; 
class NewBeacon extends Component { 
    constructor(props) { 
    super(props); 
    this.state = {inputname: '', 
    inputdescription: '' , 
    inputzone: '' , 
    inputstore: '' , 
    inputfloor: '', 
    dropdownZone: false, 
    dropdownStore: false, 
    dropdownFloor: false, 
    data:[ 
       {name:"Nikko Laus1"}, 
       {name:"Sam Collins"}, 
       {name:"Carl Smith Wesson"} 
      ], 
      store:[ 
       {name:"abcd"}, 
       {name:"Sam Collins"}, 
       {name:"Carl Smith Wesson"} 
      ], 
      floor:[ 
       {name:"Ist"}, 
       {name:"IInd"}, 
       {name:"IIIrd"} 
      ] 
    }; 
    this.handleName = this.handleName.bind(this); 
    this.handleDescription = this.handleDescription.bind(this); 
    this.handleSubmit = this.handleSubmit.bind(this); 
    this.handleChange = this.handleChange.bind(this); 
    this.toggleDropdown = this.toggleDropdown.bind(this); 
    // alert("hey"); 


    } 
static contextTypes = { 
    router: React.PropTypes.object.isRequired 
} 
handleSubmit(event){ 

    alert('Submitted: ' + this.state.inputname + this.state.inputdescription + this.state.inputzone + this.state.inputstore + this.state.inputfloor); 
    event.preventDefault(); 
    this.context.router.push('/components/BeaconSettings'); 
    } 
    toggleDropdown(dropType) { 
     this.setState({[dropType]: !this.state[dropType]}) 
    } 


    handleName(event) { 

    this.setState({inputname: event.target.value}); 
    } 
    handleDescription(event){ 
    this.setState({inputdescription: event.target.value}); 
    } 
    handleChange(event, type) { 
    this.setState({[type]: event.target.value}); 
    } 




    render() { 
    let Zone = this.state.data.map(person => 
     { 
      return <DropElement key={person.id} data={person}/> 
     }); 

    let Store = this.state.store.map(person => 
    { 
     return <DropElement key={person.id} data={person}/> 
    }); 
    let Floor = this.state.floor.map(person => 
    { 
     return <DropElement key={person.id} data={person}/> 
    }); 
    return (<div><div> 
      <div className="animated fadeIn"> 
      <br /><div className="card" style={{ width: 77 + '%' }}> 
       <div className="card-header"> 
       Create Beacon 
       </div> 
       <div className="card-block"> 
       <div className="input-group mb-1"> 
        <span className="input-group-addon"><i className="icon-user"></i></span> 
        <input type="text" className="form-control" value={this.state.inputname} onChange={this.handleName} placeholder="Name" /> 
       </div> 

       <div className="input-group mb-1"> 
        <span className="input-group-addon"><i className="fa fa-align-justify"></i></span> 
        <input type="textArea" value={this.state.inputdescription} onChange={this.handleDescription} className="form-control" placeholder="Description"/> 
       </div> 
       <div className="card-header"> 
       Select a zone</div> 
       <div className="card-block"><div className="px-1 row">Zone: 
       <div className="px-2 mb-1"> 

       <Dropdown isOpen={this.state.dropdownZone} toggle={this.toggleDropdown.bind(this, 'dropdownZone'}> 
        <input type="text" value={this.state.inputzone} onChange={this.handleChange.bind(this, 'inputzone'} className="caret" placeholder="Select a Zone" 
        onClick={this.toggleDropdown.bind(this, 'dropdownZone'}} data-toggle="dropdown" aria-haspopup="true" aria-expanded={this.state.dropdownZone} /> 

        <DropdownMenu> 
         {Zone} 

        </DropdownMenu> 
        </Dropdown></div></div></div> 

        <div className="card-header"> 
       Select a Store</div> 
       <div className="card-block"><div className="px-1 row">Store: 
       <div className=" px-2 mb-1"> 

        <Dropdown isOpen={this.state.dropdownStore} toggle={this.toggleDropdown.bind(this, 'dropdownStore'}}> 
        <input type="text" value={this.state.inputstore} onChange={this.handleChange.bind(this, 'inputstore')} className="caret" placeholder="Select a Store" 
        onClick={this.toggleDropdown.bind(this, 'dropdownStore'}} data-toggle="dropdown" aria-haspopup="true" aria-expanded={this.state.dropdownStore} /> 

        <DropdownMenu> 

        {Store} 

        </DropdownMenu> 
        </Dropdown> 

       </div></div></div> 
        <div className="card-header"> 
       Select a floor</div> 
       <div className="card-block"><div className="px-1 row">Floor: 
       <div className=" px-2 mb-1"> 

        <Dropdown isOpen={this.state.dropdownFloor} toggled={this.toggleDropDown.bind(this, 'dropdownFloor')}> 
        <input type="text" value={this.state.inputfloor} onChange={this.handleChange.bind(this, 'inputfloor')} placeholder="Select a Floor" 
        onClick={this.toggleDropdown.bind(this, 'dropdownFloor')} data-toggled="dropdown" aria-haspopup="true" aria-expanded={this.state.dropdownFloor} /> 

        <DropdownMenu> 
          {Floor} 

        </DropdownMenu> 
        </Dropdown></div></div></div> 


        </div> 

       </div> 

       </div> 
      </div> 

      <div className="px-2 row" style={{ width: 90 + '%' }}> 
      <div><button className="nav-link btn btn-block btn-success" onClick={this.handleSubmit} activeClassName="active"> 
       Next</button> 
       </div><div className="px-2"><Link to={'/components/social-buttons'} className="nav-link btn btn-block btn-danger" activeClassName="active"> Cancel</Link> 
</div> 
<div className="float-right"><Link to={'/components/social-buttons'} className="nav-link btn btn-block btn-success" activeClassName="active"> 
Default Notification 
</Link></div> 
</div></div> 




    ) 
    } 
} 

class DropElement extends React.Component 
{ 
    constructor() 
    { 
     super(); 
    } 

    render() 
    { 
     return (<DropdownItem>{this.props.data.name} 
        </DropdownItem> 
      ); 
    } 
} 

export default NewBeacon; 
+0

http://stackoverflow.com/questions/42968877/how-to-apply-filter-using-ract-redux – Piyush