Bonjour à tous je débute dans React depuis un mois. Avec un composent qui utilise un input traditionnel React je n'ai pas de soucis. Voici mon composent

import { useId } from "react";

const style = {
inputGroup: {
display: 'flex',
flexDirection: 'column',
marginBottom: '1rem',
width: '100%'
},
input: {
padding: '.5rem .8rem',
borderRadius: 10,
border: 'none',
width: '100%'
}
}

function TextField({ placeholder, value, onChange, error, name }) {

const id = useId();

const handleChange = (event) => {
    onChange(event.target.value);
}

return (

        <input style={ style.input } type="text" id={id} placeholder={ placeholder } value={ value } onChange={ handleChange } />

);

}

export default TextField;

Mais je voudrait utiliser un input autocomplate réalisé avec turnstone mais j'ai l'erreur suivante:
Unhandled Runtime Error

TypeError: event.target is undefined

const handleChange = (event) => {> 33 | onChange(event.target.value); | ^ 34 | }

Donc je ne sait pas ce qui correspond à event.target pour turnstone.

Voici le composant qui pose soucis

import { useId } from "react";
import React from 'react'
import Turnstone from 'turnstone'

const styles = {
input: 'w-full h-12 border border-oldsilver-200 pl-10 pr-7 text-xl outline-none rounded',
query: 'text-oldsilver-800 placeholder-oldsilver-400',
typeahead: 'text-crystal-500 border-white',
cancelButton: absolute w-10 h-12 inset-y-0 left-0 items-center justify-center z-10 text-crystal-600 inline-flex sm:hidden,
clearButton: 'absolute inset-y-0 right-0 w-8 inline-flex items-center justify-center text-crystal-500 hover:text-hotpink-300',
listbox: 'w-full bg-white sm:border sm:border-crystal-500 sm:rounded text-left sm:mt-2 p-2 sm:drop-shadow-xl',
groupHeading: 'cursor-default mt-2 mb-0.5 px-1.5 uppercase text-sm text-hotpink-300',
item: 'cursor-pointer p-1.5 text-lg overflow-ellipsis overflow-hidden text-oldsilver-700',
highlightedItem: 'cursor-pointer p-1.5 text-lg overflow-ellipsis overflow-hidden text-oldsilver-700 rounded bg-crystal-100',
match: 'font-semibold',
noItems: 'cursor-default text-center my-20'
}

// Set up listbox contents.
const listbox = {
displayField: 'name',
data: (query) =>
fetch(https://localhost:8000/livesearch?query=${encodeURIComponent(query)}&limit=10)
.then(res => res.json())
}

function LiveSearch({ placeholder, value, onChange, error, name }) {

const id = useId();

const handleChange = (event) => {
    onChange(event.target.value);
}

return (
    <Turnstone id={id} listbox={listbox} styles={styles} typeahead={false}  value={ value } onChange={ handleChange } placeholder="Enter a city or airport"/>
);

}

export default LiveSearch;

J'ai aussi un input datepiker qui génère la mémé erreur:

import React, { useState } from "react";
import { DatePicker } from "react-rainbow-components";

export default function RainbowDatepicker(onChange) {
const [date, setDate] = useState(null);

const handleChange = (event) => {
    onChange(event.target.value);
}

return (
<DatePicker
id="datePicker-1"
value={date}
selectionType="range"
onChange={handleChange}
formatStyle="large"
borderRadius="square"
/>
);
}

Cordialement

2 réponses


Hello :)

Alors fais un test en faisant un console.log(event.target.value) avant d'appeler onChange dans handleChange

Mais je pense que le console va fonctionner, le problème doit venir de la fonction onChange qui se trouve dans handleChange, tu peux montrer cette fonction?

Merci de ta réponse: Voici la fonction:

onChange={ (v) => handleInputChange('title', v) }