Визуализация значений на основе поиска с уникальным идентификатором — ReactJS

я использую reactjs, nodejs и mysql... который извлекает данные из базы данных. Сейчас моя проблема заключается в том, что мне нужно показать строку только на основе значений поиска, возможно, не включая кнопку отправки (например, поиск Google)

вот моя ссылка для получения NodeJS, поэтому, если я введу http:\localhost\productlist\3, тогда он отобразит 3-й продукт только в NodeJS, но я хочу реализовать ту же функциональность в reactjs, а также через окно поиска

app.get("/productslist/:idaddproducts", (req, res) => {
  const id = req.params.idaddproducts
  console.log(id)
  connection.query("SELECT * FROM `addproducts` where idaddproducts = ? ",id,(err, rows) => {
    if (!err) console.log(rows), res.json({ data: rows });
    //data variable is not mandatory but inorder to pass the result we need it
    else console.log(err);
    // connection.end()
  });
});

и вот мой реагирующий js-код

export default function MaterialTableDemo() {
  const initialState = {
    idaddproducts: "",
    productName: "",
    productId: "",
    productBrand: "",
    productQuantity: "",
    productPrice: "",
    productType: ""
  };
  const [poName, pnName] = React.useState(initialState);

  const handleName = e => {
    e.preventDefault();
    pnName({ ...poName, [e.target.name]: e.target.value });
    console.log(poName);
  };

  async function handleTable(e) {
    const res = await fetch("http://localhost:4000/productslist/:id");
    const data = await res.json();
    pnName(data.data);
    console.log(data.data);
  }

  useEffect(() => {
    handleTable();
  }, []);

  const classes = useStyles();
  return (
    <form className={classes.root} noValidate autoComplete="off" align="center">
      <div className={classes.formGroup}>
        <FormControl>
          <Input
            type="search"
            label="Product ID"
            variant="outlined"
            size="small"
            placeholder="Enter Product ID"
            value={poName.idaddproducts}
            name="idaddproducts"
            onChange={handleName}
          />
        </FormControl>
        {poName.length &&
          poName.map(v => {
            return (
              <h4 key={v.idaddproducts}>
                {v.productName}
                {v.productId}
                {v.productBrand}
                {v.productQuantity}
                {v.productPrice}
                {v.productType}
              </h4>
            );
          })}
      </div>
    </form>
  );
}

Любая помощь будет высоко ценится


person Logesh P    schedule 09.01.2020    source источник
comment
Хотели бы вы ввести текст в поле поиска, найти его в своей базе данных и отобразить эти элементы в своем приложении для реагирования?   -  person hurricane    schedule 09.01.2020
comment
Точно, когда мы набираем, он должен отображать возможные совпадения в таблице или, по крайней мере, мы можем добавить кнопку, затем мы вводим в поле поиска и нажимаем ввод, чтобы отобразить данные в ответ.   -  person Logesh P    schedule 09.01.2020
comment
Где бы искать этот текст? ProductName, productBrand? оба?   -  person hurricane    schedule 09.01.2020
comment
Планирование поиска с использованием idaddproducts, который является первичным ключом с уникальным значением. Если это сработает, я перенесу ту же функциональность в productCode.   -  person Logesh P    schedule 09.01.2020


Ответы (3)


async function handleTable(e) {
    const id = poName.idaddproducts;
    const res = await fetch("http://localhost:4000/productslist/" + id);
    const data = await res.json();
    pnName(data.data);
    console.log(data.data);
}

useEffect(() => {
    handleTable();
}, [poName.idaddproducts]);

Попробуйте использовать так.

person ma_dev_15    schedule 09.01.2020
comment
Что возвращает e? - person ma_dev_15; 09.01.2020
comment
когда я набираю 10, вывод консоли - {idaddproducts: 1}, затем, когда я набираю 100, вывод консоли - {idaddproducts:10}, и больше не извлекаются данные - person Logesh P; 09.01.2020
comment
Используйте событие onBlur вместо onChange - person ma_dev_15; 09.01.2020
comment
Ничего не появляется.. даже в консоли - person Logesh P; 09.01.2020
comment
Давайте продолжим обсуждение в чате. - person ma_dev_15; 09.01.2020

Проверьте это, это будет работать нормально Проверьте это, это будет работать нормально, если нет, то возникнет другая проблема

person SudTheNerd    schedule 09.01.2020

теперь это работает... вот кусок кода... спасибо этим двум людям

export default function MaterialTableDemo() {
  const initialState = {
    idaddproducts: "",
    productName: "",
    productId: "",
    productBrand: "",
    productQuantity: "",
    productPrice: "",
    productType: ""
  };
  const [poName, pnName] = React.useState(initialState);

  const handleName = e => {
    const idAddProducts = e.target.value;
    e.preventDefault();
    pnName({ ...poName, idaddproducts: idAddProducts });
    handleTable(idAddProducts);
    console.log(poName);
  };

  async function handleTable(idAddProducts) {
    const id = poName.idaddproducts;
    const res = await fetch(
      "http://localhost:4000/productslist/" + idAddProducts
    );
    const data = await res.json();
    pnName(data.data);
    console.log(data.data);
  }

  useEffect(() => {
    handleTable();
  }, []);

  const classes = useStyles();
  return (
    <form className={classes.root} noValidate autoComplete="off" align="center">
      <div className={classes.formGroup}>
        <FormControl>
          <Input
            type="search"
            label="Product ID"
            variant="outlined"
            size="small"
            placeholder="Enter Product ID"
            value={poName.idaddproducts}
            name="idaddproducts"
            onChange={handleName}
          />
          {poName.length &&
            poName.map(v => {
              return (
                <h4 key={v.idaddproducts}>
                  {v.productName}
                  {v.productId}
                  {v.productBrand}
                  {v.productQuantity}
                  {v.productPrice}
                  {v.productType}
                </h4>
              );
            })}
        </FormControl>
      </div>
    </form>
  );
}

См. снимок экрана

person Logesh P    schedule 09.01.2020