Не удается установить состояние в функции onClick в React Hook - PullRequest
0 голосов
/ 07 апреля 2020

Привет, я не могу установить состояние с помощью функции, которую я определил для onClick. Все остальные строки работают, кроме установки состояния.

export default function SaleProducts(props) {
     const [currentSelected, setSelected] = useState(props.location.state.pid);

     useEffect(() => {
       superagent
        .post("url")
        .set("Content-Type","application/x-www-form-urlencoded")
        .send({"access_token":token})
        .set('accept', 'json')
        .end((error, response) => {
          if(error){
            console.log("Error")
          }
          else{
            var json = response.body;
            json.products.map((res) => {
            var array = [res.title,"Not yet published",res.variants[0].price,<Button onClick={(event) => handleItemDeletion(event,res.id)}>Delete Item</Button>];
            arr.push(array);
          })
     ,[currentSelected]}

     const handleItemDeletion = (event,id) =>{
       event.preventDefault();
       var cSelected = currentSelected.replace(id,'');
       setSelected((currentSelected) => cSelected);         //this is not working
       console.log("Current Selected : ",currentSelected)        
     }

     return(<arr>);    //this is only for representation

Функция OnClick вызывается, но только эта строка setSelected не работает. Состояние не меняется, оно все равно, как и раньше.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Установка состояния неверна. Попробуйте это,

export default function SaleProducts(props) {
     const [currentSelected, setSelected] = useState(props.location.state.pid);

     useEffect(() => {
       superagent
        .post("url")
        .set("Content-Type","application/x-www-form-urlencoded")
        .send({"access_token":token})
        .set('accept', 'json')
        .end((error, response) => {
          if(error){
            console.log("Error")
          }
          else{
            var json = response.body;
            json.products.map((res) => {
            var array = [res.title,"Not yet published",res.variants[0].price,<Button onClick={(event) => handleItemDeletion(event,res.id)}>Delete Item</Button>];
            arr.push(array);
          })
     ,[currentSelected]}

     const handleItemDeletion = (event,id) =>{
       event.preventDefault();
       var cSelected = currentSelected.replace(id,'');
       setSelected(cSelected);         // check here
       console.log("Current Selected : ",currentSelected)        
     }

     return(<arr>);
1 голос
/ 07 апреля 2020

Вы должны передать значение setSelected, а не функции. Примерно так: setSelected(cSelected);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...