Удалить предыдущие события из объекта состояния в ReactJS

У меня есть кнопки Mic-off и Mic-on, которые переключаются с помощью тройной операции. events (массив JSON) - это список объектов JSON с event_name и date_time.

{this.props.events.map((event) => (
 <div  key = {event.event_name}>
    <div> {this.state.micStates[event.event_name]?
     <span onClick = {()=>this.stopRecord(event.event_name)}> <MicOn /> 
     </span> 
     :<span onClick = {()=>this.startRecord(event.event_name)}><MicOff />       
    </span>}              
   </div>
   <li style = {{color:'pink',}}>{event.date_time}</li>
 </div> ))
}

Два метода: startRecord, StopRecord

startRecord: он начнет запись и сохранит в кусках и удалит предыдущее состояние события, либо установит для него значение false, если щелкнуть более одного раза

stopRecord: остановит mediaRecorder и сохранит файл в формате formData и установите для события текущего состояния значение false.

constructor(props) {
    super(props);
    this.state = {
        mics :{},
    }
}
startRecord = event => {
    var size=Object.keys(this.state.mics).length
    if (size<1){
        let {mics}=this.state;
        mics[event]=mics[event]? false : true;
        this.setState({ mics });


        // do the work here
    }
    else{
        this.setState(prevState=>({
            mics:{},
        }));
        console.info("switch other state off");
    }
}

stopRecord = event => {

    let {mics}=this.state;
    mics[event]=mics[event]? false : true;
    this.setState({ mics });
    console.info(Object.keys(this.state.mics).length);

}

Я не хочу переключать несколько кнопок одновременно, если одно событие истинно, тогда как другое, присутствующее в mics, должно быть ложным.

сохранить идентификатор активного события, например, если вы start_record для одного события, которое id: 123, тогда активным идентификатором будет 123, и только для этого идентификатора вы можете выполнить действие customn

Shubham Khatri 05.12.2018 11:07

@ShubhamKhatri Я уже передал уникальный ключ обоим методам, если вы посмотрите, Хотя я сделал, и проблема решена, и она работает, но не так, как я хотел, обновил свой код если и еще условие ..... я хочу, чтобы я сделал mics[event] истинным для одного при щелчке по текущему событию предыдущие микрофоны [событие] должны стать ложными. Это означает, что единственная разница, с которой я сейчас сталкиваюсь, заключается в том, что если я щелкну другое событие, все микрофоны будут пустыми, поэтому они будут отключены, а для предыдущих

Kramer 05.12.2018 11:21

@ShubhamKhatri, вопрос в том, как мне получить доступ к предыдущему элементу объекта в состоянии else, тогда я мог бы легко установить его false и позволить току, который я передаю, быть только истинным ...

Kramer 05.12.2018 11:35

Вы поддерживаете объект микрофона, вместо этого я бы предложил сохранить одну переменную, если это сработает для вас.

Shubham Khatri 05.12.2018 11:38

@ShubhamKhatri, потому что я использовал тернарную операцию для каждого уникального элемента this.state.mics[event], там должен быть объект

Kramer 05.12.2018 11:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
41
1

Ответы 1

Поскольку this.state.micStates - это массив. Установите флажок типа "isPlaying: true / false". По умолчанию это будет false. Как только вы вызовете play / start record, передайте индекс массива и выполните простую операцию поиска и обновления массива. Только для этого переданного ключа будет установлено значение true, а для остальных - false, поскольку вы будете выполнять цикл.

Но в этом проблема: я не хочу устанавливать несколько событий как истинные, должно быть одно событие, которое могло бы быть истинным. Если я вызываю startRecord для двух событий, то в истинном состоянии будут два события.

Kramer 05.12.2018 09:46

Другие вопросы по теме