selvi jp

selvi jp

  • 1.8k
  • 291
  • 15.9k

Convert class components to functional hook in react js

Aug 27 2021 7:10 AM

Hi,

I can acheive this code in class component.but now i want this in functional hook.my fuctional component knowledge is low compared to class component.can anyone convert this class to functional.

constructor(props) {
    super(props);
    this.state={
      selectedOption: [] ,
      Dropdownlist:[],
     setSelectedValue:[],
        Details: [] ,
        ImageDisplay: '
    }
    this.submit = this.submit.bind(this);
    this.dropdown = this.dropdown.bind(this);
    this.handleChange = this.handleChange.bind(this);  
  }
getValues(apiValues) {  
  let previousValue = [];  
  let names = apiValues[0].profile_name.split(",");  
  let ids = apiValues[0].user_id.split(",");  
  let index = 0;  
  if (names.length === ids.length) {  
    names.forEach((item) => {  
      let data = { value: ids[index].toString(), label: item };  
      index++;  
      previousValue.push(data);  
    });  
  }  
  this.setState({ selectedOption: previousValue });  
}  
submit() {
  let user = JSON.parse(localStorage.getItem('user'));
  const accessToken = user;
  console.log(accessToken);
  fetch(url, {
          method: 'GET',
          headers: {
              "Content-type": "application/json",
              "Accept": "application/json",
              Authorization: "Bearer " + accessToken,
              "Access-Control-Allow-Headers": "Access-Control-Request-Headers "
          },
      }).then(response => response.json())
      .then(data => {
        this.getValues(data);   
          this.setState({
              Details: data
          });
})}
dropdown() {
  let user = JSON.parse(localStorage.getItem('user'));
  const accessToken = user;
  console.log(accessToken);
  fetch(url, {
          method: 'GET',
          headers: {
              "Content-type": "application/json",
              "Accept": "application/json",
              Authorization: "Bearer " + accessToken,
              "Access-Control-Allow-Headers": "Access-Control-Request-Headers "
          },
      }).then(response => response.json())
      .then(data => {
          this.setState({
              Dropdownlist: data
          });
          console.log("dropdown",data);
      });
}
handleChange(value, actionDetails) {  
  let items = [...this.state.selectedOption];  
  if (actionDetails.action === "remove-value") {  
    if (items) {  
      var index = -1;  
      items.forEach((item, i) => {  
        if (item.label === actionDetails.removedValue.label && item.value === actionDetails.removedValue.value) {  
          index = i;  
          return;  
        }  
      });  
      if (index > -1) {  
        items.splice(index, 1);  
      }  
    }  
  }  
  else {  
    items.push(actionDetails.option);  
  }  
  this.setState({ selectedOption: items });  
}   
componentDidMount() {
  window.addEventListener('load', this.submit);
  this.submit();
  window.addEventListener('load', this.dropdown);
  this.dropdown();
}
componentWillUnmount() {
  window.removeEventListener('load', this.submit);
  this.submit();
  window.addEventListener('load', this.dropdown);
  this.dropdown();
}
  render() { 
    const {Details,Dropdownlist,setSelectedValue} = this.state;
    let selectedValue = [];  
    let selectedLabel = [];  
    this.state.selectedOption && this.state.selectedOption.forEach((item) => {  
      selectedValue.push(item.value);  
      selectedLabel.push(item.label);  
    });  
    let unique = [...new Set(selectedLabel)]   
    console.log(unique);  
    let unique2 = [...new Set(selectedValue)]   
    console.log(unique2);  
    return (  
      <div style={{width: '300px'}}>
      <Select 
      isClearable={false}
      placeholder={"Select Mates"}
      styles={this.customStyles}
      menuPortalTarget={document.querySelector('body')}
      value={this.state.selectedOption}  
      onChange={this.handleChange}  
      selectedValue={true}  
      hideSelectedOptions={false}  
      options={Dropdownlist.map(e => ({ label: e.Name, value: e.Id}))}
      isMulti
      theme={theme => ({
      ...theme,
      colors: {
      ...theme.colors,
      neutral50: 'white', 
      },
      })}
      />
<input type="hidden"   name="user_id" defaultValue={unique2}  />
{Details.map(Det=>
<input type="hidden"  name="default_userid"  defaultValue={Det.user_id}  />)}
     </div>
    );  
  }  
}

 


Answers (2)