Профиль пользователя заблокирован сроком с 25 марта 2020 г. и навсегда по причине: нарушение п. 6.6 правил сайта
  • Как написать роуты, чтобы было совместимы node js и react?

    @hollanditkzn Автор вопроса
    Максим, Или лучше чтобы было примерно так?
    let markup = ReactDOM.renderToString(<Handler />);
    let head = Helmet.rewind();
    
    const html = `
        <!doctype html>
        <html ${head.htmlAttributes.toString()}>
            <head>
                ${head.title.toString()}
                ${head.meta.toString()}
                ${head.link.toString()}
            </head>
            <body>
                <div id="content">
                     ${markup}
                </div>
            </body>
        </html>`
    ctx.body = html;
  • Как написать роуты, чтобы было совместимы node js и react?

    @hollanditkzn Автор вопроса
    Максим, Я вообще правильно его установил?
    в index.pug
    doctype html
    html
        head
            meta(name='viewport', content='width=device-width, initial-scale=1, shrink-to-fit=no')
            meta(http-equiv='x-ua-compatible', content='ie=edge')
            link(rel='stylesheet' type='text/css' href='/css/index.css')
        body
            block content

    #content
    script(src='/client/index.js')
    Application
    import React from 'react';
    import { Helmet } from 'react-helmet';
    
    class Application extends React.Component{
        constructor(prop){
            super(prop);
        }
        render(){
            return(
                <div className='application'>
                    <Helmet>
                        <meta charSet='utf-8' />
                        <title>{this.props.title}</title>
                    </Helmet>
                </div>
            );
        }
    }
    
    module.exports = Application;

    В index.js
    import React from 'react';
    import Application from './aplication';
    <Application title='Главная страница'/>
  • Как написать роуты, чтобы было совместимы node js и react?

    @hollanditkzn Автор вопроса
    Максим, Тогда как понимаю title будет один и тот же и поэтому лучше использовать helmet?
  • Как написать роуты, чтобы было совместимы node js и react?

    @hollanditkzn Автор вопроса
    Если я правильно понял реакт, то я должен допустим в get подключить index.html шаблонный, где head есть. и в нем добавить компоненты react и там же уже писать роуты

    Я правильно понял документацию?
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Виталий, Мне нужно в сторону react router смотреть?
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Виталий, То что Вы послали мне, это берется
    render() {
      return (
    	<div>
    	  <BlogPost id={123} /> //Сюда он передал id
    	</div>
      );
    }
    // BlogPost.js
    componentWillMount() {
      axios.get(`http://exmaple.com/blog/${this.props.id}`) // А тут он вывел
    	.then(response => this.setState(response.data))
    }

    Но у меня нет app.js компонента допустими id надо брать из api? как тут быть?
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Виталий, Ладно, как мне из бд брать информацию? как понимаю по api
    Откуда может компонент знать что выводить react компонент.
    Допустим я сделал react компонент
    Вот пример допустим https://codepen.io/rusline/pen/JMmJQM?editors=0010
    данные статичные, но мне нужно что эти данные можно взять на страницы /api/test/:id где :id это id темы.
    И как мне передать в props если я не могу определить еси я ничего не знаю про информации страницы?
    Вот допустим такой код, тоже такую ошибку выведит
    class Form extends React.Component{
        constructor(props){
            super(props);
            this.state = {
                currentQuestion: 0
            }
        }
        componentWillMount = () => {
            console.log(this.props.id);
            axios.get('/api/test/{this.props.id}')
                .then((response) => console.log(response));
        };
    
        onClick = (e) => {
            if(this.state.currentQuestion != 2){
                e.preventDefault();
            }
            this.setState({
                currentQuestion: ++this.state.currentQuestion
            })
        }
        render(){
            const { thema } = this.props;
            const question = thema[0].test[this.state.currentQuestion];
    
            return(
                <div>{this.componentWillMount}</div>
            )
        }
    }

    Как ни крути. Мне нужно получить просто данные из базы данных и вывести их в компоненте. Надеюсь я понятно выразился
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Виталий, Все равно не пойму, это как понимаю между компнентами, а у меня немножко другая ситуация, у меня нет компоненты, мне нужно данные взять из бд
    import axios from 'axios';
    console.log(this.props.id);
    axios.get('/api/test/1')
        .then((response) => console.log(response));

    Как я знаю что не будет работать, потому что система не знает id страницы, и переменой нет, чтобы передать туда данные, то получаю в ответ ошибку
    Uncaught TypeError: Cannot read property 'props' of undefined

    Надеюсь я уже понятно описал, что хочу сделать и как их получить в реакт
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Вот все мои файлы
    router.js
    const Router = require('koa-router'),
        User = require('./model/user'),
        Test = require('./model/test'),
        router = new Router();
    router.get('/testing/:id', async ctx => {
            await ctx.render('test', {
                title: 'Текст',
                path: 'test'
            })
        })
        router.get('/api/test/:id', async(ctx) => {
            let theme = await Test.theme(ctx.params.id);
            let test = await Test.test(ctx.params.id);
            let answearArr = await Promise.all(test.map(item => {
                return Test.answear(item.id);
            }));
    
            for(let n=0; n<answearArr.length; n++){
                test[n].answer = answearArr[n];
            }
    
            theme.test = rand_array(0,2,test);
            ctx.body = theme;
        })

    Во вьюшке public/test.pug
    include layout
        .container
    script(src='/client/testing.js'

    И в /client/testing.js там должен быть react компонент теста, но пока что я хочу понять как я должен вывести данные
    import axios from 'axios';
    
    axios.get('/api/test/1')
        .then((response) => console.log(response));

    Вот и все
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Виталий, Допустим в этой статьи там он статичную ссылку получает по id, но у меня овсем по другому реализовано
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Виталий, Нет не понял. У меня во вьюшке
    <div class='container'>
            <div id='root'></div>
    </div>
    <script src='/client/testing.js'></script>

    В testing.js находится как раз этот запрос, это react компонент непосредственно
    Как этот файл может знать id вот проблема
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Для более подробного у меня есть страница
    router.get('/testing/:id', async ctx => {
            await ctx.render('test', {
                title: 'Тест',
            })
        })

    И внутри этого рендеринга стоит react компонент
    import axios from 'axios';
    
    axios.get('/api/test/:id')
        .then((response) => console.log(response));

    И в роуте этой страницы /api/test/:id следующие данные выводит
    router.get('/api/test/:id', async(ctx) => {
            let theme = await Test.theme(ctx.params.id);
            let test = await Test.test(ctx.params.id);
            let answearArr = await Promise.all(test.map(item => {
                return Test.answear(item.id);
            }));
    
            for(let n=0; n<answearArr.length; n++){
                test[n].answer = answearArr[n];
            }
    
            theme.test = rand_array(0,2,test);
            ctx.body = theme;
        })
  • Как в запросе react api передать id страницы?

    @hollanditkzn Автор вопроса
    Илья Ростопка А как понять, что именна этот id берет, просто тут я понимаю, что если страница у меня /testing/4, то в данном примере он будет все равно брать данные из страницы /api/test/1. Если да, то мне нужно чтобы она брала из /api/test/4 страницы в react компоненте. Поэтому для меня не понятно как передавать id страницы внутри компонента react
  • Как сделать все в одном окне?

    @hollanditkzn Автор вопроса
    Евгений Вольф, Или один блок, и там непосредственно через jquery меняется данные после нажатие? или не так надо все?
  • Как сделать все в одном окне?

    @hollanditkzn Автор вопроса
    Евгений Вольф, Все равно не могу реализовать каждый блок по отдельности если все запихать в 12 разных блоков. Вот мой код пока что для 3 блоков
    В роуте я получаю данные
    .get('/testing/:id', async ctx => {
            let theme = await Test.theme(ctx.params.id);
            let test = await Test.test(ctx.params.id);
            let answearArr = await Promise.all(test.map(item => {
                return Test.answear(item.id);
            }));
    
            for(let n=0; n<answearArr.length; n++){
                test[n].answer = answearArr[n];
            }
    
            await ctx.render('test', {
                title: 'Тест',
                path: 'test',
                thema: theme[0],
                test: rand_array(0, 2, test),
            })
        })

    И во вьюшке их показываю
    mixin question(number)
        .question(id=number)
            p=test[number].name
            ul
                each answear in test[number].answer
                    li
                        input(type='radio' name=answear.id_question)
                        | #{answear.text}
            button.buttonTest Ответить
    include layout
        .container
            h1=thema.name
            form
                +question(0)
                +question(1)
                +question(2)

    пробовал в стиле сделать display: block и по id #0 тоже дисплей block. Но ничего не получается
  • Как сделать все в одном окне?

    @hollanditkzn Автор вопроса
    Евгений Вольф, Сейчас попробую и отпишу если что-то не получилось
  • Как сделать все в одном окне?

    @hollanditkzn Автор вопроса
    Евгений Вольф
    в 12 разных блоков. Показывать следующий блок после ответа на вопрос

    Вопрос, а блоки я раставляю data-key исоответвтенн я их и беру?
    Просто у меня приходит mysql я сделал их в объект и сейчас надо как-то все сформировать нормально
  • Как добавить в массив по двум выборкам for?

    @hollanditkzn Автор вопроса
    Антон Спирин, Сейчас выходит следующий запрос
    [ RowDataPacket {
        id: 1,
        name: 'Вопрос 1',
        id_theme: 1,
        answear: [ [{id: 7, text: 'Текст 1', answer: 1}], [{id: 8, text: 'Текст 2', answer: 0}], [{id: 9, text: 'Текст 3', answer: 0}] ] },
      RowDataPacket {
        id: 2,
        name: 'Вопрос 2',
        id_theme: 1,
        answear: [ [{id: 7, text: 'Текст 1', answer: 1}], [{id: 8, text: 'Текст 2', answer: 0}], [{id: 9, text: 'Текст 3', answer: 0}] ] },
      RowDataPacket {
        id: 4,
        name: 'Вопрос 3,
        id_theme: 1,
        answear: [ [{id: 7, text: 'Текст 1', answer: 1}], [{id: 8, text: 'Текст 2', answer: 0}], [{id: 9, text: 'Текст 3', answer: 0}] ] } ]

    Вот а должно быть answear там быть все не id 7,8,9 а в первом объекте 1,2,3, во втором 4,5,6 и в третьем 7,8,9
  • Как сделать рефакторинг кода?

    @hollanditkzn Автор вопроса
    Такой вопрос, а как вернуть значение в этот массив, потому что test.map(item => await Test.answear(item.id));
    Не получается выводит ошибку, перевел на
    let answearArr = await test.map(item => {
                Test.answear(item.id);
            });

    Но у меня выходит пустой массив, точнее 3 underfined и второй момент если return Test.answear(item.id);
    То я промись получаю. Как то не получается map вывестинормально